使用Unix套接字获取“已使用的地址”错误

前端之家收集整理的这篇文章主要介绍了使用Unix套接字获取“已使用的地址”错误前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
使用Unix本地套接字编写下面的C源我得到了一个关于已经使用的地址的错误.在检查了man 7 Unix以获取更多信息之后,我尝试创建一个执行我的程序的子文件夹(显然修改了当前文件夹中的sun_path字段),但错误始终如一.

有人能帮助我吗?

代码

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/un.h>
#include <unistd.h>
#include <errno.h>

#define MAXLEN  128

int main (int argc,char *argv[]){

        struct sockaddr_un      server;
        int                                     serverfd,clientfd;
        socklen_t                       addrsize = sizeof(struct sockaddr_un);
        char                            buff[MAXLEN],*path;

        if (argc < 2){
                printf("Error: %s [MESSAGE]\n",argv[0]);
                return 1;
        }

        if ((serverfd = socket(AF_UNIX,SOCK_STREAM,0)) < 0){
                printf("Error \"%s\" in socket()\n",strerror(errno));
                exit(1);
        }
        puts("socket()");

        server.sun_family = AF_UNIX;
        path = strcpy(server.sun_path,"/home/myhome/DropBox/Sources/C/sub");

        printf("[DEBUG]Address bound at %s\n",path);

        if ((bind(serverfd,(struct sockaddr*)&server,addrsize)) < 0){
                printf("Error \"%s\" in bind()\n",strerror(errno));
                exit(1);
        }
        puts("bind()");


        if ((listen(serverfd,1)) < 0){
                printf("Error \"%s\" in listen()\n",strerror(errno));
                exit(1);
        }

        if ((clientfd = accept(serverfd,NULL,&addrsize)) < 0){
                printf("Error \"%s\" in accept()\n",strerror(errno));
                exit(1);
        }

        write(clientfd,argv[1],strlen(argv[1]));
        read(clientfd,buff,sizeof(buff));

        puts(buff);

        close(clientfd);
        close(serverfd);
        return 0;
}
您应该在绑定调用之前取消链接()路径文件.绑定期间文件存在时,您将收到此错误.您应确保在退出应用程序之前取消链接/删除文件,或者始终在绑定之前取消链接.

检查bind的手册页.另外,请注意最后手册页中给出的示例.

猜你在找的Bash相关文章