关于Winsock编程的一点小问题

来源:百度知道 编辑:UC知道 时间:2024/05/05 19:12:20
在socket等待连接时有这样的代码:
SOCKET acc;
while(1){
acc=SOCKET_ERROR;
while(acc==SOCKET_ERROR)
acc=accept(m_socket,NULL,NULL) //m_socket为socket句柄
printf("client connected.\n");
break;
}
我想知道外面的那个无限循环体是干什么的,个人感觉里面的那个循环体已经可以达到我们想要的目的了,有客户端连接时,acc的值不再为SOCKET_ERROR,然后跳出循环开始接受和发送数据包,这样不对么?为什么还要外面的while(1)?

acc=accept(m_socket,NULL,NULL) 是一个阻塞函数,在等待连接时线程阻塞在这个地方,有连接请求时建立连接并继续执行后续代码。这里的while循环是为了保正能够接收多个连接。
但那个break;语句又导致只要接收到1个连接就退出循环,因此还是只能建立一个连接。

在外面加个while(1)是为了可以同时接受多个客户端的连接吧
如果去掉while(1)就只能接受一个连接了
我想是这样

如果没有while,就只能接受一次客户端的连接请求了

哪还能支持多客户端以及重复连接?