2009-09-01 9 views
0

Il semble que ce soit toujours le cas lorsque j'essaie de recevoir des données dans ce socket. Le socket est une socket valide et la connexion est également établie et il y a toujours des données qui viennent périodiquement dans le port spécifique. Mais certains comment la fonction recv donne cette erreur. Toute idée de ce que peut être la cause.Obtenir l'erreur WSAEWOULDBLOCK toujours lors de l'appel de la fonction de socket recv() pour la réception de données

exemple de code présent ci-dessous.

merci à l'avance

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)

toujours obtenir d'erreur WSAEWOULDBLOCK

Répondre

1

Vous définissez la prise à NON-BLOQUANT:

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

et puis vous essayez d'utiliser le blocage de recv() - dans Dans ce cas, vous aurez toujours cette erreur.

Regardez asynchrones fonctions telles que select, WSARecv ...

ou désactiver le mode non bloquant la mise en dwNonBlocking à zéro.

+0

bien j'ai essayé d'assigner dwnonblocking à zéro et ai obtenu une erreur différente WSAEFAULT toujours. une idée – ckv

+1

Avez-vous initialisé pRxBuffer correctement? –

Questions connexes