在udp服务器上一次创建两个套接字,如何绑定()?

时间:2013-03-29 10:44:36

标签: c windows winapi network-programming udp

我想在我的udp服务器应用程序上实现两个功能。

  1. 创建持续接收来自任何客户端的数据的线程。

  2. 创建一个在特定时间段后在服务器套接字上连续发送数据并等待客户端回复的线程。 (我实现了这一点,以确保无论何时客户端出现故障,都不会从客户端收回数据,服务器也会知道客户端已关闭。)

  3. 现在,我面临的问题是,由于两个线程共享相同的连接套接字,每当两个线程同时尝试访问此套接字时,就会建立死锁。

    我找到的解决方案之一是创建两个套接字。一个连续接收数据,另一个用于从服务器不时地向客户端发送数据并等待其响应的套接字,但是因为Server必须是bind()ed而且我有bind()ed我的套接字到INADDR_ANY曾经,我将如何创建一个单独的套接字,用于从服务器发送数据并等待客户端的回复。

    请帮我解决这个并发症。

    如果还有其他更好的实施方式,也请告诉我 在此先感谢:)

1 个答案:

答案 0 :(得分:1)

您必须使用non-blocking net functions并使用mutex以确保没有两个线程一次访问套接字。

如果使用非阻塞功能,单个线程可能就足够了。使用多个线程可能无法提高性能,但可能使代码更具可读性。