个人经验积累(纯碎随手记,持续更新)

来源:互联网 发布:内容营销的出路 知乎 编辑:程序博客网 时间:2024/05/21 17:25

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也为非阻塞套接字。


1 0
原创粉丝点击