2013-12-07 60 views
0

我試圖使用Winsock的select()函數。但是,儘管成功創建套接字,將其綁定到端口並開始監聽,但選擇失敗,錯誤10038(「不是套接字」)。我可以用TCPView確認套接字確實在端口8080上偵聽,所以我不知道爲什麼我得到這個錯誤。Winsock選擇錯誤10038,綁定並偵聽成功

這是我成功使用listen()後添加的一些測試代碼。

fd_set readfds; 
    SOCKET client_socket[2], s; 
    int act, max_clients = 2; 

    while (true) 
    { 
     FD_ZERO(&readfds); 
     FD_SET(this->sock, &readfds); 

     for (int i = 0; i < max_clients; i++) 
     { 
      s = client_socket[i]; 
      if(s > 0) 
      { 
       FD_SET(s, &readfds); 
      } 
     } 

     act = select(0, &readfds, NULL, NULL, NULL); 

     if (act == SOCKET_ERROR) 
     { 
      printf("Select failed: %d" , WSAGetLastError()); 
     } 
    } 

我已經採取了break,通常會來的printf()後,只是讓我可以看到它在套裝軟件更容易。正如預期的那樣,TCPView將該狀態報告爲「聆聽」。 this-> sock是由bind()listen()使用的SOCKET。

+0

您不初始化client_socket。複製錯誤? – usr

+0

請發佈創建和綁定的代碼。在你發佈'client_socket [i] = null'的代碼中,所以's = client_socket [i]'也是'null'。 – MeNa

回答

-1

您選擇的FD之一不是套接字FD。

+0

@downvoter哦,請。這是錯誤文本的解釋。這裏沒有錯誤。 – EJP