2013-04-05 112 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