科技常识:socket unix domain IPC的实例代码

2021-04-11 04:46:10

今天小编跟大家讲解下有关科技常识:socket unix domain IPC的实例代码,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关科技常识:socket unix domain IPC的实例代码的相关资料,希望小伙伴会喜欢也能够帮助大家。

仅供参考:

服务端:socket->bind->listen->send/recv->close

客户端:socket->bind->connect->send/recv->close

#include #include #include #include #include #include #include #include #include #include #include #include #define filename "test.socket" void setnonblocking(int fd) { fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); } void *client_func(void *arg) { sleep(3); int fd = socket(AF_UNIX, SOCK_STREAM, 0); setnonblocking(fd); sockaddr_un un; memset(&un, 0, sizeof(un)); un.sun_family = AF_UNIX; sprintf(un.sun_path, "file_%d.socket", (int)getpid()); unlink(un.sun_path); socklen_t len = sizeof(un); bind(fd, (sockaddr *)&un, sizeof(un)); strcpy(un.sun_path, filename); int ret = connect(fd, (sockaddr *)&un, len); if (ret == -1) { printf("connect server failed...\n"); close(fd); return NULL; } char buf[256]; memset(buf, 0, sizeof(buf)); strcpy(buf, "hello world"); int n = send(fd, buf, strlen(buf)+1, 0); printf("send data, %d bytes..\n", n); sleep(5); close(fd); return NULL; } int main() { unlink(filename); signal(SIGPIPE, SIG_IGN); int fd = socket(AF_UNIX, SOCK_STREAM, 0); int yes = 1; setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes)); setnonblocking(fd); sockaddr_un un; memset(&un, 0, sizeof(un)); un.sun_family = AF_UNIX; strcpy(un.sun_path, filename); bind(fd, (sockaddr *)&un, sizeof(un)); listen(fd, 100); pthread_t pid; pthread_create(&pid, NULL, client_func, NULL); sockaddr_un uu; socklen_t len = sizeof(uu); while (true) { memset(&uu, 0, len); int newfd = accept(fd, (sockaddr *)&uu, &len); if (newfd != -1) { setnonblocking(newfd); printf("newfd = %d, path = %s\n", newfd, uu.sun_path); char buf[512]; memset(buf, 0, sizeof(buf)); int n = recv(newfd, buf, 512,0); printf("recv %d bytes, contents is %s\n", n, buf); } usleep(100000); } close(fd); return 0; }

以上就是小编为大家带来的socket unix domain IPC的实例代码全部内容了,希望大家多多支持爱蒂网~

来源:爱蒂网

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。