如果我有一个处理传入请求的 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/