尝试连接两个或多个UDP套接字

时间:2017-01-24 15:49:11

标签: c linux sockets unix

我正在编写一个非常简单的应用程序,它需要使用许多UDP套接字。但是,当我使用地址连接两个或多个套接字时,我得到连接错误:连接被拒绝。当我将它与一个SOCK_STREAM(父级所必需的)和一个数据报套接字(用于子级)一起使用时,它工作得很好,但是在添加了一个需要使用数据报套接字的子节点后,我得到了这个错误。

一些来源:

int openSocketByPath(char path[106], int type)
{
    char _path[108]="";
    struct sockaddr_un tempadres = {0};
    int tmpsock;
    tmpsock = socket(AF_UNIX, type, 0);
    if(tmpsock<0)
    {
        perror("socket() error");
        exit(2);
    }
    tempadres.sun_family=AF_UNIX;
    strcat(_path,path);
    strcpy(tempadres.sun_path+1,_path);
    tempadres.sun_path[0]=0;
    if((connect(tmpsock, (struct sockaddr *)&tempadres,sizeof(tempadres)))<0)
    {
        perror("connect() error");
        exit(3);
    }
    return tmpsock;
}

这会创建套接字(第一个用于父项,循环用于子项):

sd = socket(AF_UNIX, SOCK_STREAM, 0);
if(sd<0)
{
    perror("socket() error");
    exit(2);
}
on_exit(_close,NULL);
serveradres.sun_family=AF_UNIX;
strcpy(serveradres.sun_path,adres);
if((connect(sd, (struct sockaddr *)&serveradres,sizeof(serveradres)))<0)
{
    perror("connect() error");
    exit(3);
}
sprintf(id_work,"%d|%s",workers, id);
if(send(sd, id_work, sizeof(id_work), 0)<0) // wyslanie ID
{
    perror("send() error");
    exit(4);
}
if(recv(sd,&result,sizeof(result),0)<0)
{
    perror("recv() error");
    exit(5);
}
if(result==-1)
{
    printf("error while creating socket");
    exit(6);
}
sd = openSocketByPath(id, SOCK_STREAM);
for(int i=0; i<workers; i++)
{
    strcpy(tmp,"");
    sprintf(tmp,"%s%d",id,i);

    if(send(sd, tmp, sizeof(tmp), 0)<0) // wyslanie numeru pracownika
    {
        perror("send() error");
        exit(4);
    }
    if(recv(sd,&result,sizeof(result),0)<0)
    {
        perror("recv() error");
        exit(5);
    }
    if(result==-1)
    {
        printf("error while creating socket");
        exit(6);
    }
    workersSockets[i]=openSocketByPath(tmp,SOCK_DGRAM);

0 个答案:

没有答案