2009-09-01 22 views
0

我試圖在該套接字中接收數據時,似乎總是得到這個特殊情況。套接字是一個有效的套接字,並且連接也建立,並且有一些數據總是定期進入特定的端口。但是一些recv函數如何給出這個錯誤。任何想法可能是原因。在調用用於接收數據的recv()套接字函數時始終獲取WSAEWOULDBLOCK錯誤

示例代碼如下。

在此先感謝

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

要設置插座到非阻塞:

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

然後你嘗試使用阻塞recv() - in那種情況下你總會得到這個錯誤。

異步功能,如選擇,的WSARecv ...

或禁用非阻塞模式設置dwNonBlocking爲零。

+0

以及我試着將dwnonblocking分配到零,並總是得到一個不同的錯誤WSAEFAULT。任何想法 – ckv 2009-09-01 08:33:48

+1

您是否正確初始化了pRxBuffer? – 2009-09-01 09:03:08

相關問題