一个简单的winsock2.2的阻塞的例子,为何到accept那里不阻塞呢?
// WinSock2Sample.cpp : Defines the entry point for the console application.
//
#include <stdio.h>
#include <winsock2.h>
//#pragma comment(lib, "ws2_32.lib")
#define BUFFERSIZE 1024
const unsigned int nPort = 5151;
int main(int argc, char* argv[])
{
WSADATA wsaData;
SOCKET Listen, Accept;
char buf[BUFFERSIZE];
int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
Listen = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN ServerAddr;
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_addr.s_addr = INADDR_ANY;
ServerAddr.sin_port = htons(nPort);
//绑定监听端口
int nRet = bind(Listen, (LPSOCKADDR)&ServerAddr, sizeof(ServerAddr));
if(nRet == SOCKET_ERROR)
{
printf("bind error\n");
closesocket(Listen);
WSACleanup();
return 0;
}
nRet = listen(Listen, 5);
if(nRet == SOCKET_ERROR)
{
printf("listen error\n");
closesocket(Listen);
WSACleanup();
return 0;
}
SOCKADDR_IN ClientAddr;
int ClientAddrLen;
Accept = accept(Listen, (LPSOCKADDR)&ClientAddr, &ClientAddrLen);
printf("client ip:%s\n", inet_ntoa(ClientAddr.sin_addr));
printf("client port: %d\n", ntohs(ClientAddr.sin_port));
while(1)
{
//接收数据
nRet = recv(Accept, buf, BUFFERSIZE, 0);
//if(nRet < 1) break;
if(nRet > 0)
printf("recv data is: \n %s \n", buf);
}
closesocket(Listen);
closesocket(Accept);
WSACleanup();
//printf("Hello World!\n");
return 0;
}
这个程序应该执行到Accept = accept(.....)这里时是阻塞等待客户端连接的,可是我执行到这一句时Accept的值是0xffffffff,紧接着就跳到下面一句了,到底是什么地方的问题呢?