gpt4 book ai didi

C++ winsock 错误

转载 作者:太空宇宙 更新时间:2023-11-04 12:24:53 24 4
gpt4 key购买 nike

我有一个接受客户端的简单服务器。客户端连接到服务器。服务器首先会执行以下操作:

  1. 获取客户端套接字
  2. 为客户创建线程
  3. 调用::recv();

这里的问题是 recv 返回 -1WSAGetLastError 返回 WSAENOTSOCK:(非套接字上的套接字操作。)Microsoft:“尝试对非套接字进行操作。套接字句柄参数未引用有效套接字,或者对于选择,fd_set 的成员无效”我真的无法弄清楚问题到底是什么。

客户端的套接字仍然有效,客户端剂量的任何接收都会立即返回

谢谢,Raxvan

最佳答案

我非常确定您只是立即关闭了新接受的连接的套接字。

您使用 sok 类,它会在其 d'tor(析构函数)处自动关闭套接字。

sok client = listener.Accept();

以下代码从返回的套接字构造sok 对象。它的生命周期以 while 循环的花括号为界。意味着 - 在创建一个应该从套接字读取的线程后立即关闭它。

附言你误用了 sok。根据它的作用,您必须防止为同一个套接字创建多个这样的对象。

例如复制c'tor必须声明为私有(private)的。它在您的代码中是公开的。另外,使用 explicit 关键字声明接受 SOCKET 的 c'tor 也是一个好主意。

结论:思考并回顾你对 sok 类的使用。

关于C++ winsock 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3084628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com