我尝试执行两个进程的以下代码。 child 发送数据报, parent 应该接收并打印它 .父进程看起来没有绑定(bind)(错误:地址已在使用中)。 有什么想法吗?
#include <sys/socket.h>
#include <sys/un.h>
#include <signal.h>
#include <stdio.h>
#define N 9
int main(int argc, char *argv[]) {
int pid,s,n,addrlen;
char msg[N];
struct sockaddr_un addr;
addr.sun_family=AF_UNIX;
strcpy(addr.sun_path,"test-socket"); // pathname
addrlen=sizeof(addr.sun_family)+strlen(addr.sun_path);
if (!(pid=fork())) {
printf("child\n");
s=socket(PF_UNIX,SOCK_DGRAM,0);
sleep(3); /* wait for parent to bind */
sendto(s,"hi parent",9,0,(struct sockaddr*)&addr,addrlen);
printf("child sent\n");
close(s);
return(0);
}
printf("father\n");
s=socket(PF_UNIX,SOCK_DGRAM,0);
bind(s,(struct sockaddr *)&addr,addrlen); // error here
n=recvfrom(s,msg,N,0,NULL,NULL);
if(n<=0){printf("error\n");}
msg[n]='\0'; printf("%s\n",msg);
close(s);
unlink("test-socket");
return(0);
最佳答案
为什么不在 fork 之前绑定(bind)?等待一段固定的时间然后发送数据不是一个好主意
关于c - c 中的数据报套接字。看起来父进程从不绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24147000/