Получение ошибки WSAEWOULDBLOCK всегда при вызове функции сокета recv () для получения данных - PullRequest
0 голосов
/ 01 сентября 2009

Кажется, я получаю это всегда, когда пытаюсь получить данные в этом сокете. Сокет является действительным сокетом, и соединение также установлено, и всегда есть данные, которые периодически поступают в конкретный порт. Но кое-как функция 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

1 Ответ

1 голос
/ 01 сентября 2009

Вы устанавливаете сокет в НЕБЛОКИРОВКУ:

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

и затем вы пытаетесь использовать блокировку recv () - в этом случае вы всегда получите эту ошибку.

Посмотрите на асинхронные функции, такие как select, WSARecv ...

Или отключить настройку неблокирующего режима dwNonBlocking в ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...