解决:函数如下:
long arch_tcp_recv ( SOCKET fd_socket,
char s_buf[],
long l_msgsize,
long l_timeout )
{
char *ps_buf;
long l_read_so_far = 0L;
long l_read = 0L;
long l_len;
long l_alarm_wait = 0L;
DWORD Start;
DWORD End;
int i_retcd;
l_timeout = l_timeout * 1000;
i_retcd = setsockopt(fd_socket,SOL_SOCKET,SO_RCVTIMEO,(char *)&l_timeout,sizeof(l_timeout));
if ( i_retcd != 0 )
{
/* 报错:setsockopt SO_RCVTIMEO failed */
return  ( -1 );
} Start= GetTickCount();
while ( l_read_so_far < l_msgsize )
{
ps_buf = s_buf + l_read_so_far;
l_len = l_msgsize - l_read_so_far; l_read = recv ( fd_socket, ps_buf, l_len, 0 );
if ( l_read == SOCKET_ERROR )
{
/* 报错:recv from socket(%d) failed: retcd = %d",fd_socket,l_read */
return  ( -1 );
} if ( l_read > 0 )
{
l_read_so_far += l_read;
}
if ( l_read == 0 )
{
/*报错:recv from socket(%d) failed: the connection has been gracefully closed.",fd_socket */
return  ( -1 );
}
End= GetTickCount();
if ( End - Start > (DWORD)l_timeout )
{
/*报错:timeout(%d): elapse(%d)",l_timeout,End - Start */
return  ( -1 );
}
}  return( l_read_so_far );} /* arch_tcp_recv */