Socket相關

1、Windows Socket相關:

一般情況下,通過socket創建的套接字默認是阻塞的,因此如果非必需不要用以下代碼將套接字設置爲阻塞:

Uint32 argRet = 0;
 if(SOCKET_ERROR == ioctlsocket(sockNew, FIONBIO, &argRet))
 {
      printf("ERROR: VdpuTransferManage_Listen::run() Set Socket nonblock failed!\n");
 }

如果用上訴代碼設置之後,雖然關閉套接字是成功的,但系統並未釋放套接字資源(即端口仍然被佔用),使用netstat可以看到相應IP端口仍然處於TIME_WAIT狀態,系統會等待時間大約2ML(數據包最大生存週期),默認最大值爲2分鐘,纔會釋放套接字資源。

2、Windows Socket相關:

windows下TCP套接字,accept()返回的套接字與監聽套接字保持一致的阻塞性:

SOCKET sockNew = accept(m_ListenSocket, (struct sockaddr *)&clientService, (int *)&addrLen);

如上代碼,如果m_ListenSocket爲阻塞套接字,則sockNew也爲阻塞套接字;如果m_ListenSocket爲非阻塞套接字,則sockNew也爲非阻塞套接字。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章