Windows套接字accept()返回错误的值

0 c++ sockets windows networking

在我的程序的服务器端,当程序命中接受函数时,它等待连接.找到连接传入后(在我与客户端连接后),accept()方法返回1.基于该返回,它尝试接收并发送到套接字1,这是一个错误的套接字.

这是我服务器的一些代码:

for(;;)
{
   if( sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen)  != SOCKET_ERROR) 
Run Code Online (Sandbox Code Playgroud)

找到连接后,sConnect的值为1.

为什么会这样?我该如何解决?

Rem*_*eau 5

在Windows上,如果accept()失败,则返回INVALID_SOCKET,而不是SOCKET_ERROR.

真正的问题是你的if()语句同时执行赋值和比较,但它缺少一个必需的赋值括号,所以它实际上是在比较一个不同于你预期的值.改为:

if( (sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen)) != INVALID_SOCKET )
Run Code Online (Sandbox Code Playgroud)

更好的选择是分配分配和比较:

sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen);
if( sConnect != INVALID_SOCKET )  
Run Code Online (Sandbox Code Playgroud)