首页服务器Web服务器 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…

仅供参考:

服务端: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; } 
本文来自网络,不代表1号站长-站长学院|资讯交流平台立场。转载请注明出处: https://www.1cn.cc/fwq/web/5614.html
上一篇centos7 安装docker步骤详细介绍
下一篇 如何在Docker容器内外互相拷贝数据
admin

作者: admin

这里可以再内容模板定义一些文字和说明,也可以调用对应作者的简介!或者做一些网站的描述之类的文字或者HTML!

为您推荐

评论列表()

    联系我们

    联系我们

    0898-88888888

    在线咨询: QQ交谈

    邮箱: email@wangzhan.com

    工作时间:周一至周五,9:00-17:30,节假日休息

    关注微信
    微信扫一扫关注我们

    微信扫一扫关注我们

    关注微博
    返回顶部