C++ Winsock 10093 错误

2024-04-18

我正在尝试用 C++ 构建一个可以接受多个客户端的服务器。为此,我构建了一个 winsock 包装器,并使用带有 boost 的线程来为每个客户端进行通信。
我在尝试接受客户时遇到了一个奇怪的问题,我有一个看起来像这样的循环。

int clientID = 0;
listenSocket = new Socket(SocketType::TCP);
listenSocket->Bind(port);
listenSocket->Listen();

while(running)
{
    Socket *socket = &listenSocket->Accept();
    mutex.lock();
    clients.push_back(new Client(socket,  clientID));
    mutex.unlock();

    std::cout << "Client with id " << clientID << " connected!" << std::endl;

    std::cout << WSAGetLastError() << std::endl;

    clientID++;
}

现在,第一个客户端接受良好并且 WSAGetLastError() 返回 0,但是在第一个连接之后,即使我不尝试连接另一个它也只是继续在控制台 10093 中写入,这意味着循环中的 Accept() 停止阻塞并且由于某种原因不会正确接受。我在网上读到这个错误是由于没有调用 WSAStartup() 引起的,但我确实在套接字的构造函数中调用了它,并且它确实在第一次接受了。


10093 是WSANOTINITIALISED,这意味着:

  • 之前已进行套接字调用WSAStartup()已经被调用了。

  • 之后正在进行套接字调用WSACleanup()已被调用多次WSAStartup()被称为。

根据您提供的代码,看来Socket::Accept()正在返回一个Socket按值而不是对象Socket*指针。如果是这样,那么Accept()正在创建一个临时的Socket之后立即超出范围Socket *socket被安排了。有可能的是Socket析构函数正在调用WSACleanup()当它不应该的时候。致电WSAStartup() and WSACleanup()必须始终保持平衡。

打电话的最佳时间WSAStartup()是在程序启动期间,而不是在对象的构造函数内。同样,打电话的最佳时间WSACleanup()是在退出前的程序清理期间,而不是在对象的析构函数内。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ Winsock 10093 错误 的相关文章

随机推荐

  • 在目录上运行 ng lint 时遇到问题

    我正在尝试使用 Angular 8 附带的 linter 但我有一段时间忽略了 TSLint 错误 我希望慢慢地清除错误 并且我正在寻找一种在整个目录上运行 linter 的方法 其中一些目录可能有多个子目录 我看过ng lint 的 An
  • Git Cherry-Pick 和冲突

    有两个不同的 git 分支 其中一个开发正在进行 Branch1 在其他分支中 一些 PoC 工作正在进行 Branch2 现在 我想挑选从 Branch1 到 Branch2 的更改 以便 Branch2 是最新的 现在 在挑选 4 或
  • 对于“未找到项目”错误页面,最合适的 HTTP 状态代码是什么

    我很好奇 项目不存在 页面最合适的 HTTP 状态代码是什么 如果页面本身不存在 我显然会使用 404 但是 我的其中一个页面有一个userid参数 它是一个 编辑用户 页面 如果不存在具有给定用户 ID 的用户 我将显示一个错误页面 但我
  • 谷歌合作实验室“ResourceExhaustedError”与 GPU

    我正在尝试微调Vgg16模型使用colaboratory但我在使用 GPU 训练时遇到了这个错误 OOM when allocating tensor of shape 7 7 512 4096 INFO tensorflow Error
  • 无空间分页库

    新分页库的所有示例都已包含在 Room 库中 Room 为我们创建了一个数据源 就我自己而言 我需要创建自定义数据源 这是我的视图模型类中的一个方法 它应该返回实时数据 我的 livedata 总是返回 null LiveData
  • Cakephp 递归条件下的分页

    我对这个问题很生气 请有人帮助我 我有这个模型 订单有很多 gt 订单项有一个 gt 产品 产品有字段vendor id 我想对包含具有特定供应商 ID 的产品的订单进行分页 我怎样才能实现这个目标 我在订单控制器中的代码 if empty
  • 转义 Django 模板变量的简单方法

    对于一个新项目 我们正在编写文档aboutDjango 模板系统 我们也将 Django 用于文档项目本身 因此 Django 会选取示例代码中的所有示例变量并尝试呈现它们 我们发现解决这个问题的唯一方法是使用 模板标签 http docs
  • 为什么 unique_ptr 不能从 T* 构造?

    举个简单的例子 这段代码有什么 问题 unique ptr
  • 使用 @Transactional 时自动装配依赖项的注入失败

    我测试了我的 DAO 但没有成功 出现以下错误 Tests in error testAccountOperations com tsekhan rssreader dao HibernateControllerTest Error cre
  • javax.activation.UnsupportedDataTypeException:没有 MIME 类型多部分/混合的对象 DCH;边界

    目前我正在编写一段监听目录的代码 当使用 apk 文件更新目录时 我会将包含此 apk 文件的邮件发送到 gmail 帐户 我在我的程序中使用 Jnotify 和 JAVA Mail 我得到的错误是 javax mail Messaging
  • 使用 jQuery 的 MediaWiki API 没有响应

    我尝试从 Wikipedia 获取一些 JSON 内容 getJSON http en wikipedia org w api php action query prop revisions rvprop content titles ti
  • 星系模拟:更改点的颜色并在鼠标悬停时显示文本

    我正在尝试创建模拟 https riteshsingh github io galaxies 4673 个最近星系的位置 星系是点 我想为鼠标悬停时的点着色并加载星系的名称 我花了很多天试图实现它 我可以更改颜色以及进行基本的光线投射 但是
  • Android 版 Google Chrome 上的字体大小显示问题

    我有一个网页 其中字体大小为body 16px 在 Android 版 Google Chrome 上 我遇到以下问题 当页面最初加载时 未定义字体大小 因此从正文继承字体大小 的元素中的字体大小大于 16px 如果您继续阅读 您将会看到
  • 如何通过 Stripe API 判断关联帐户是否完整?

    我正在尝试验证我网站上的用户是否已通过其 API 完成了 Stripe 的入职流程 我在帐户对象中没有看到任何字段 https stripe com docs api accounts https stripe com docs api a
  • 最大行大小超出允许的最大值 8060 字节

    在运行 Microsoft SQL Server 2014 时 更改表后 我收到有关行大小的警告 ALTER TABLE myTable ALTER COLUMN aRandomColumn NVARCHAR 10 Warning The
  • 使用 Gevent 和 WSGI 阻止调用

    我刚刚开始使用协程并阅读了 gevent 和 greenlet 为了进行测试 我通过 gevents pywsgi 模块提供了此代码 from gevent pywsgi import WSGIServer import gevent de
  • 将动态属性映射读入 Spring 托管 bean

    我有一个像这样的属性文件 my properties file app One id 1 app One val 60 app Two id 5 app Two val 75 我将这些值读入 Spring 配置文件中 bean 的映射属性
  • 提取给定 2D 图像点、深度图和相机校准矩阵的 3D 坐标

    我有一套2D image输出的关键点OpenCV FAST角点检测功能 使用Asus Xtion I还有一个时间同步的深度图 其中所有相机校准参数都是已知的 使用这些信息我想提取一组3D坐标 点云 在OpenCV 任何人都可以给我任何有关如
  • 我如何从 django 中的查询集中获取字符串表示形式

    我有这样的查询集 qs User objects all 我正在像这样转换为字典 qs values id username 但我想获取字符串表示形式 而不是用户名 就像是 qs values id str 你不能 values只能获取存储
  • C++ Winsock 10093 错误

    我正在尝试用 C 构建一个可以接受多个客户端的服务器 为此 我构建了一个 winsock 包装器 并使用带有 boost 的线程来为每个客户端进行通信 我在尝试接受客户时遇到了一个奇怪的问题 我有一个看起来像这样的循环 int client