c++ - 为 UDP 服务器响应重用 sock_fd 与新 sock_fd

标签 c++ c sockets udp winsock

如果我有一个处理传入请求的 UDP 服务器 recvfrom ,处理传入的请求(可能耗时),可能发回响应,然后调用 recvfrom同样,用 sockaddr* from 中的信息创建一个新的 sock_fd 是否更好?发回响应或使用服务器的 sock_fd 发送响应?

基本上,问题是我是想要创建一个新的 sock_fd 的开销,还是我想要我的服务器能够处理请求而不必等待发送先前的请求响应。

我不能根据应用程序的需要来决定,因为这将在库中使用(因此我不知道是否需要响应,以及处理请求需要多长时间).

我不明白这怎么不是一个真正的问题。这个问题在上面的粗体部分和第一句的最后部分已经清楚地提出了这个问题

最佳答案

不需要创建一个新的 sock_fd,因为创建的那个已经作为它的服务器完成了一个 bind 调用。

您还必须确保客户端不会在阻塞 recvfrom 中等待响应。

大多数服务器在无法给出正确响应时会发出一些错误代码,而客户端会根据该错误代码重复请求或执行其他操作,您可能需要以请求-响应方式设计协议(protocol)。

如果处理有问题,那么您始终可以将客户端的数据 + struct sockaddr 放入队列中,并通过向线程发出唤醒信号来延迟处理,这样做您的监听线程可以快速返回到recvfrom,然后您可以将处理线程的响应发送到保存的struct sockaddr 客户端你完成了。

关于c++ - 为 UDP 服务器响应重用 sock_fd 与新 sock_fd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995673/

相关文章:

c++ - 字符数组转int

c++ - 为 double * obj 和 obj * double 重载 * 运算符的问题

c++ - 如何遍历 map ,修改 map 但在每次迭代时恢复?

c - 从 C 中的 bool 值设置位掩码的快速方法

c - 将 Visual C 链接到 MinGW 静态库

c - UDP 单播 : two processes listening on same udp port; only one receiving packets

c++ - C++ 中的链接列表

C Unsigned int 提供负值?

c++ - UDP数据包到局域网中的特定IP

Java - 编码字符串