网络通讯函数测试记录
1、对于非阻塞的WSAConnect 无论是否连上,都可以说是瞬间(2毫秒内)返回。
假定指定超时时间是3秒:
场景1:如果connect的服务端是一个无效的ip端口,此时用select可读去检测是否连接上,如果指定超时时间超过1秒钟比如3秒,则一般要1秒钟才返回结果,如果指定100毫秒,则100毫秒后返回。如果connect是成功的,则select瞬间返回。
场景2:接收方程序异常,接收方接收缓冲区已满,而发送方的发送缓冲区也满了,此时发送方如果是检测是否可写,那是3秒。
2、一个有效的套接字,可以随时设置为阻塞或者非阻塞模式,可以动态改变。
3、在win7 32位系统上测试,TCP发送和接收缓冲区都是8192字节。
int iSize(0);
int iLen = sizeof(iSize);
getsockopt(m_hSocket,SOL_SOCKET,SO_RCVBUF,( char *)&iSize,&iLen)
4、在win7 32位系统上测试,select函数返回超时,这时用WSAGetLastError()是没有错误号的。只有返回-1即SOCKET_ERROR时才能获取错误码。
select()调用返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;如果超时则返回0;否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError获取相应错误代码。
当返回为-1时,所有描述符集清0。
当返回为0时,超时不修改任何描述符集。
当返回为非0时,在3个描述符集里,依旧是1的位就是准备好的描述符。这也就是为什么,每次用select后都要用FD_ISSET的原因。