在TCP通信中,为了防止阻塞式调用send函数与recv函数时程序在这两个函数处等待过久甚至一直等待,我们需要设置send函数与recv函数的超时时间长度。
要达到这个目的,在winsock编程中,我们调用setsockopt来完成这个任务。
int setsockopt( SOCKET s, int level, int optname, const char FAR *optval, int optlen );
此函数的相关文档可参看:
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740476(v=vs.85).aspx
http://baike.baidu.com/view/569217.htm
此处以一个用例来说明如何解决设置发送超时与接收超时设置的问题:
int nTimeout = 1000;
//设置发送超时为1000ms
if (SOCKET_ERROR == setsockopt( this->m_socket, SOL_SOCKET, SO_SNDTIMEO, (char *)&nTimeout, sizeof(int)))
{
fprintf(stderr, "Set SO_SNDTIMEO error !\n");
}
//设置接收超时为1000ms
if (SOCKET_ERROR == setsockopt( this->m_socket, SOL_SOCKET, SO_RCVTIMEO, (char *)&nTimeout, sizeof(int)))
{
fprintf(stderr, "Set SO_RCVTIMEO error !\n");
}