首页 > 服务器 > Web服务器 > 正文

socket unix domain IPC的实例代码

2024-09-01 13:49:54
字体:
来源:转载
供稿:网友

仅供参考:

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

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

#include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <fcntl.h> #include <sys/un.h> #include <pthread.h> #include <cstring> #include <cstdio> #include <unistd.h> #include <signal.h>  #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的实例代码全部内容了,希望大家多多支持VEVB武林网~

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表