【发布时间】:2015-05-16 16:55:17
【问题描述】:
您好,我正在尝试制作一个简单的程序,它分叉然后应该像客户端/服务器一样运行。这是我的代码:
int main (){
int sfd,fdc;
struct sockaddr_un sa;
strncpy(sa.sun_path,SOCKNAME,UNIX_PATH_MAX);
sa.sun_family = AF_UNIX;
char buf[N+1];
if (fork() != 0){
sfd = socket(AF_UNIX,SOCK_STREAM,0);
bind (sfd, (struct sockaddr *) &sa ,sizeof(sa));
listen(sfd, SOMAXCONN);
fdc= accept(sfd,NULL,0);
read(fdc,buf,N);
printf("Server got: %s\n",buf);
write(fdc,"bye!",5);
close(fdc);
close(sfd);
exit(EXIT_SUCCESS);
}
else {
sfd = socket(AF_UNIX,SOCK_STREAM,0);
while(connect(sfd, (struct sockaddr *)&sa,sizeof(sa)) == -1){
if (errno == ENOENT){
printf("Aspetto 1 sec\n");
sleep(1);
}
else {perror(NULL); exit(EXIT_FAILURE) ;}
}
write(sfd,"Hallo!",7);
read(sfd,buf,N);
printf("Client got: %s\n",buf);
close(sfd);
exit(EXIT_SUCCESS);
}
我不明白为什么当我尝试将客户端连接到服务器时会失败。我收到此错误:连接被拒绝。 我实在找不到问题出在哪里,谢谢您的帮助。
【问题讨论】:
-
看起来您的第一个问题可能是竞争条件。有什么理由认为客户端在服务器监听之前没有尝试连接?
-
我想我已经找出了问题所在:我在程序运行时创建了一个套接字,但我没有消除它,所以我有一个名为 mysock 的文件,不会让我的程序运行。如果我手动删除它,代码将完美运行...曾经...我现在该如何解决?
标签: c sockets connection errno