管理指向socket文件描述符的指针

时间:2013-04-05 16:58:08

标签: c sockets pointers udp

我想知道是否可以管理指向套接字udp文件描述符的指针,因为我必须同时将send()数据发送到2个不同的套接字。

我有一个创建2个套接字的函数(socket()setsocket()bind()connect()...) 和另一个更改套接字(如果一个条件为真,但我不写这部分)

  void set_socket(){                                    
    socket00 = socket(AF_INET, SOCK_DGRAM, 0);
    socket01 = socket(AF_INET, SOCK_DGRAM, 0);
    ...
    setsocket();
    setsocket();
    ....
    ....
  }


  int change_socketfd (int fd) {    
    if (fd == socket01 ) {          
        return ( socket00 );
    }
    else if (fd == socket00 ) {
        return ( socket01 );
    }
  }

我可以使用这样的指针吗?

    int *psock;
    psock=&change_socketfd(socket00);
    ris = send(*psock, datagram, sizeof(*datagram)+1 , 0);

我需要的是动态更改socketfd,但我的代码会出现分段错误,所以我不确定这种方法是否正确或可行。 谢谢你的建议

1 个答案:

答案 0 :(得分:1)

你完成它的方式不起作用,因为&change_socketfd(socket00)给它一个返回值的地址,它只是临时存在的。我不明白为什么这不会做你想做的事情:

int psock;
psock = change_socketfd(socket00);
ris = send(psock, datagram, sizeof(*datagram)+1 , 0);

如果你真的需要它作为指针,那么试试这个:

int *psock = malloc(sizeof(int*));
*psock = change_socketfd(socket00);
ris = send(*psock, datagram, sizeof(*datagram)+1 , 0);

...
//When you're finished with psock
free(psock);