2013-04-05 76 views
0

我想知道是否有可能管理指向套接字udp文件描述符的指针,因为我必须同时将send()数据发送到2个不同套接字。我有一个函数,创建2个套接字(套接字()setsocket()绑定()连接()...) 和另一个更改套接字(如果一个条件是真的,但我不写这部分)管理指向套接字文件描述符的指针

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

您做到这一点的方式将无法正常工作,因为&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); 
+0

不是这个代码C++ ?我从来没有见过“int * psock = new int;”这种类型的声明在ansi c – nirva 2013-04-07 16:11:01

+0

是的,抱歉。我用适当的C语法编辑它。 – 2013-04-07 17:07:21