c - c 中的数据报套接字。看起来父进程从不绑定(bind)

标签 c sockets ipc datagram

我尝试执行两个进程的以下代码。 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/

相关文章:

c++ - 架构不固定时如何使用 FlatBuffers ?

perl - 如何从 Perl 脚本捕获系统命令的标准输入和标准输出?

c - 如何在x86-64架构上使用INVLPG?

c - 从两个不同的文件中读取并打印到第三个文件

.net - 2 监听同一端口的进程 - .NET 不抛出异常

Python发送UDP数据包

c++ - MPI_Barrier() 的行为?

python - Python 等语言如何克服 C 的 Integral 数据限制?

c - 如何使结构体指向不同的字符串?

android, libaums : java. io.IOException: 无法写入设备