2011-02-13 72 views
0

我一直在試圖弄清楚這一點,現在我需要幫助,因爲我沒有想法。我WSAEventselect函數返回錯誤號10038WSAEventselect錯誤:10038

代碼:

 // Error checking.... 
     if(netEvent.iErrorCode[FD_ACCEPT_BIT] != 0) 
     { 
      int temp1 = WSAGetLastError(); 
      emit ClientErrorSignal(); 
      return; 
     } 

     // Initializing socket 
     if((newClient = accept(this->info->socket, NULL, NULL)) == INVALID_SOCKET) 
     { 
      int temp2 = WSAGetLastError(); 
      emit ClientErrorSignal(); 
      return; 
     } 

     // This is where the error occurs 
     if(WSAEventSelect(newClient, &this->info->event, FD_READ|FD_CLOSE) == SOCKET_ERROR) 
     { 
      int temp3 = WSAGetLastError(); 
      emit ClientErrorSignal(); 
      return; 
     } 

this->info是傳遞到線程結構。

typedef struct { 
    SOCKET socket; 
    int size; 
    bool isTcp; 
    WSAEVENT event; 
} SINFO, *PSINFO; 

回答

2

根據the Winsock error reference,這是一個錯誤WSAENOTSOCK,這意味着你試圖做一個無效的套接字句柄的東西。沒有關於代碼中出現錯誤的更多信息,我不認爲我可以提供更多的建議,但我建議檢查以確保您正確地創建套接字(可能是要調用accept未初始化的插座是罪魁禍首?)

+0

accept本身應該初始化`newClient`套接字。這是我感到困惑的,因爲接受並沒有拋出任何錯誤。 – Koralarts 2011-02-13 02:59:18

1

這可能會或可能不會與你的問題,但你傳遞給WSAEventSelect第二個參數是一個WSAEVENT*,而該函數需要WSAEVENT。只需直接傳遞句柄,而不是其地址:

WSAEventSelect(..., info->event, ...); 
+0

你非常正確。我怎麼會這麼盲目......我需要睡覺......謝謝。 – Koralarts 2011-02-13 03:04:56

相關問題