Socket相关
2016-06-28 20:56
267 查看
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也为非阻塞套接字。
一般情况下,通过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也为非阻塞套接字。
相关文章推荐
- Substance for Unity5
- Why singleton is bad?
- 修改Tomcat Connector运行模式,优化Tomcat运行性能
- 计算机网络面试题
- iOS开发 - 第03篇 - 多线程 - 02 - GCD & 单例 & NSOperation
- 手动安装 mysqldb 与[ pip easy_install]
- Mysql中实现树状结构的所有子节点的查询
- 友盟第三方登录和分享
- Spark Hbase读取操作的一些总结与测试
- POJ 2777 线段树
- Handler的使用
- >>> FilterDispatcher <<< is deprecated! Please use the new filters!
- Maven入门指南(一)
- POJ 2777 线段树
- android 6.28 第一行代码第5.5节broadcastBestreceiver
- Apache Tomcat Native Library
- 跳台阶(斐波那契数列)
- 最长公共子串问题
- HBuilder
- 肤色检测一例-使用rgb颜色模型