- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从我从select()
的所有文档中了解的内容来看,似乎可以将写入fd_set上的select()
ing用于检查send()
ing的套接字(描述符)可用性,从而可以用来检测成功的非阻塞connect()
尝试,但是我没有得到的是,什么时候成功connect()
或accept()
之后套接字什么时候变得不可用?
从理论上讲,这是否意味着该套接字始终可用于send()
ing?
最后一个问题,在整个 session 中保持select()
ing连接的套接字进行写操作是否可行?
谢谢。
最佳答案
套接字无法写入的最常见情况是,当连接通过相对较慢的网络链接时,您的应用程序可能会饱和该网络链接。操作系统将缓冲有限数量的数据,因此在发送更多数据之前,您的应用程序必须通过检查套接字是否可用(表明已发送一些数据并且缓冲区具有可用空间)来约束自己。
至于您的其他问题,如果单个线程正在使用任何类型的多个套接字,例如Web服务器,使用select()以便有效地管理它们当然是有意义的。
关于sockets - select()ing概念写入fd_set,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4244453/
我遇到了 FD_SET 使我的程序崩溃的问题。我正在运行来自 boost Boost ASIO sample HTTP Server 的示例代码.在请求处理程序中,我放置了一个第三方 api,最终会进
**编辑:我找到了解决方案。** 对于那些敢于阅读以下内容的人,我有一个奇怪的问题: 我正在做家庭作业,需要使用 UNIX 管道在进程之间发送消息。 我对这段代码的意图是对提供的文件描述符进行 sel
我想知道是否有一种简单的方法可以遍历 fd_set?我想这样做的原因是不必遍历所有连接的套接字,因为 select() 将这些 fd_set 更改为仅包含我感兴趣的那些。我也知道,使用不打算直接访问的
我有以下 C 代码,用于设置 select() 以监听 TCP 套接字和消息队列上的传入数据: fd_set readSet; u32 maxFD = 0; mqd_t parentQueue; in
嗨,现在我想知道客户端或服务器是否断开连接,然后发送错误,但我似乎无法让它工作,我不知道该怎么做,所以我真的需要帮助 plz 这是我的代码 #ifdef _WIN32 || _WIN64
我的代码有问题,我无法找出问题所在,因为我是 select() 的新手; 谁能告诉我问题出在哪里? run_fct.c: In function ‘run’: run_fct.c:22: error:
我在编写我的第一个带有单选调用的异步服务器时遇到了这个问题: if( (retv = select((hsock 0) { printf("select() ended...\n");
我在 Linux 中有一个工作代码,正在移植到 Windows。它使用套接字库。 当我声明 fd_set xyz 时,它通过一个错误提示 error C2065: 'xyz' : undeclared
我在两个 UDP 套接字上有一个 select。有时 select 返回 2,因此两个套接字都已准备好接收,但我想首先接收可读取的最旧消息。有什么方法可以存档吗? 我需要首先获取最先到达的消息: 消息
如果当我在 select 系统调用中使用的 rdset 中放置一个连接描述符时,客户端关闭了该描述符,因此在调用 select 时它已经关闭,它是否仍会被选中并读取/在上面写上 return 0? 还
我目前正在处理的应用程序是一个服务器,它将使用 select() 管理与客户端的连接,每次服务器收到消息时,它都会打开一个新线程以读取套接字。在此期间,套接字的文件描述符从集合中删除,并将在读取结束时
我知道这不是出现此错误的第一个线程,但我真的无法理解问题所在...我的代码如下: /* File descriptor sets */ struct descs { fd_set read;
最近被FD_SET缓冲区溢出咬了两次。第一次是我们有太多套接字 (1024+) 添加到 FD_SET 中。这是一个测试用例,我们已将其禁用,并添加 assert 来检测此用例。 今天,当我们运行一个测
根据这篇文章poll vs select vs event-based : select() only uses (at maximum) three bits of data per file de
我有一个关于向 FDSET 添加新套接字文件描述符的问题。假设我们已经连接到套接字 s1: fd_set readfds; //s1 = socket(...); //connect(s1, ...)
我正在编写一个使用 select() 的程序,给定一个要读取的 fd_set。 在程序中,我保存了两个 fd_sets: 1. fd_set 名为 DB,包含我可以处理的所有 fd。 2. fd_se
我正在开发一个多客户端 Unix Domain Socket,以通过多个进程传输数据。我找到了一些实现每个客户端和其他东西之间聊天的代码,但我希望一旦客户端向服务器发送某些内容,服务器就会回复并断开客
我不是网络编程专家。我基本上有两种客户,他们有不同的超时时间。我应该使用带有连接套接字的 UDP 来进行客户端-服务器通信。 问题是双重的: a) 无论哪个客户端(或者套接字)在 t1 秒内没有响应,
我正在使用 select() 来衡量服务器没有收到任何新消息的时间。代码非常简单,看起来像这样: int res = -1; do { FD_ZERO(&readfds); FD_SE
我试图了解套接字编程和处理多个连接时的不同做法。特别是当服务器需要为多个客户端提供服务时。 我看过一些代码示例;其中一些使用 fd_set 而另一些使用 fork() 系统调用。 大致: FD_SET
我是一名优秀的程序员,十分优秀!