c++ - Windows 套接字 accept() 返回错误值

标签 c++ windows sockets networking

在我程序的服务器端,当程序点击接受函数时,它会等待连接。找到连接传入后(在我与客户端连接后),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/

相关文章:

c++ - pthread_create创建的子线程如何调用主线程?

用gcc编译的C++在VC++14有效无效

perl - 如何使用快速 Playground 实现套接字连接?

javascript - 如何将套接字传递给 Node 中的集群

c++ - getter setter 中的互斥量

c++ - 未使用的函数参数是否总是被实例化?

windows - FINDSTR : help understanding results. Returns nothing, but no error when there is one expected?

c++ - 如何在 Windows 7 下在内存有限的计算机上读取大文件?文件大小为 25GB 但 RAM 容量仅为 16GB

python - 如何制作带参数的命令行程序?

java - tomcat 获得用于创建 ajp 连接器的套接字的最佳日志级别