【问题标题】:Getting WSAEWOULDBLOCK error always while calling recv() socket function for receiving data调用 recv() 套接字函数接收数据时总是出现 WSAEWOULDBLOCK 错误
【发布时间】:2009-09-01 16:22:40
【问题描述】:

当我试图在那个套接字中接收数据时,我似乎总是得到这个特殊的东西。套接字是一个有效的套接字,并且连接也已建立,并且总是有一些数据定期进入特定端口。但是有些 recv 函数如何给出这个错误。知道可能是什么原因。

示例代码如下。

提前致谢

struct hostent      *hdata;                             // Used when Node name is converted to IP-Address
struct sockaddr_in   insock;                            // Socket address structure
unsigned long        ipaddr;                            // IP-Address in numeric format
CString sIPAddr = _T("1.1.1.1");
char * cSBCS = (char*)sIPAddr.GetBuffer(sIPAddr.GetLength());
ipaddr = inet_addr( cSBCS/*sIPAddr*/ );

hdata = gethostbyname( sIPAddr );

insock.sin_family   = AF_INET;
insock.sin_port     = htons( 2101 );
memcpy( &insock.sin_addr, *(hdata->h_addr_list), hdata->h_length );


    // Create socket
if(( m_Socket = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP )) == INVALID_SOCKET );
//  return FALSE;

// Connect to MSS-box
if(( connect( m_Socket, (struct sockaddr *)&insock, sizeof( insock ))) == SOCKET_ERROR )
DWORD dwNonBlocking = -1;
if( ioctlsocket( m_Socket, FIONBIO, &dwNonBlocking ))

if((pdwRxChars = recv(m_Socket, pRxBuffer,1024, 0)) == SOCKET_ERROR)

总是出现 WSAEWOULDBLOCK 错误

【问题讨论】:

    标签: sockets


    【解决方案1】:

    您正在将套接字设置为非阻塞:

    DWORD dwNonBlocking = -1;
    ioctlsocket( m_Socket, FIONBIO, &dwNonBlocking )
    

    然后你尝试使用阻塞 recv() - 在这种情况下你总是会得到这个错误。

    看看异步函数比如select、WSARecv...

    或者禁用非阻塞模式设置dwNonBlocking为零。

    【讨论】:

    • 好吧,我尝试将 dwnonblocking 分配为零并且总是得到不同的错误 WSAEFAULT。任何想法
    猜你喜欢
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 1970-01-01
    • 2014-01-14
    • 2022-08-11
    • 2021-11-28
    • 2015-08-19
    相关资源
    最近更新 更多