在我程序的服务器端,当程序点击接受函数时,它会等待连接。找到连接传入后(在我与客户端连接后),accept() 方法返回 1。基于该返回,它尝试接收并发送到套接字 1,这是一个错误的套接字。
这是来 self 的服务器的一些代码:
for(;;)
{
if( sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen) != SOCKET_ERROR)
找到连接后,sConnect 的值为 1。
为什么会这样?我该如何解决?
最佳答案
在 Windows 上,如果 accept()
失败,它返回 INVALID_SOCKET
,而不是 SOCKET_ERROR
。
真正的问题是你的 if()
语句同时执行赋值和比较,但是它缺少赋值所需的一组括号,所以它实际上是在比较一个不同的值(value)超出您的预期。改为这样做:
if( (sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen)) != INVALID_SOCKET )
更好的选择是将赋值和比较分开:
sConnect = accept( sListen, (SOCKADDR*)&addr, &addrlen);
if( sConnect != INVALID_SOCKET )
关于c++ - Windows 套接字 accept() 返回错误值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19255418/