18,356
社区成员
发帖
与我相关
我的任务
分享
m_hSocket = (int)::socket( AF_INET, SOCK_DGRAM, 0 );
bind();
unsigned long arg = 1;
if ( ioctlsocket(m_hSocket, FIONBIO, &arg) != 0 )
return false;
//.............
int nBufSize = 1024*8;
if ( setsockopt(m_hSocket, SOL_SOCKET, SO_SNDTIMEO, (char*)&nBufSize, sizeof(nBufSize)) == SOCKET_ERROR )
break;
if ( setsockopt(m_hSocket, SOL_SOCKET, SO_RCVTIMEO, (char*)&nBufSize, sizeof(nBufSize)) == SOCKET_ERROR )
break;
if ( setsockopt(m_hSocket, SOL_SOCKET, TCP_NODELAY, (char*)&nBufSize, sizeof(nBufSize)) == SOCKET_ERROR )
break;
::sendto( m_hSocket, pBuf , 100, 0, (sockaddr*)&addr, sizeof(addr) ); // 这里成功发送
char pBuf[1024];
SOCKADDR_IN addr;
int nLen = sizeof(addr);
int bytes = ::recvfrom( m_hSocket, pBuf, 4, 0, (struct sockaddr*)&addr, &nLen );
// bytes 返回-1,但pBuf里有值,而且是sendto发过来的值,长度为4字节
// GetLastError 返回 10040
// 如果改用以下方式接收正常
int bytes = ::recvfrom( m_hSocket, pBuf, 100, 0, (struct sockaddr*)&addr, &nLen );
// bytes 返回实际接收字节长度