2013-05-21 36 views
-3

我有一个客户端服务器应用程序。客户端向服务器发送命令并在UDP套接字通道上接收数据。
每次使用不同的ID创建套接字文件时。
我正在执行命令10000次使用脚本,我得到EBADF。 我怀疑的问题是close()没有立即关闭套接字描述符。 我已阅读关于SO_LINGER选项,但我认为它适用于TCP套接字。如何确保UDP套接字已关闭?

有什么办法可以确保close()关闭套接字描述符。

感谢

+2

你为什么不断打开和关闭UDP套接字?为什么不保持一个开放的程序的生命? – EJP

+0

这已经在现有的代码中完成了。我无法改变它,并终身打开它。 –

+0

您可能想向我们展示有问题的代码。 – alk

回答

3

这里的实际问题是,你可能不检查结果产生摆在首位的插座,或者你关闭套接字,然后再使用它,或损坏手柄价值,所以你以后遇到EBADF。 EBADF是之前编程错误的结果。不是没有关闭。找出实际的错误。不要猜测。

+0

我在创建中获得成功并在套接字上绑定,但问题仍然存在。 –

+0

*什么*问题? EBADF什么时候做*什么?*这听起来像只是你的代码中的一个错误:在某处丢失了FD的价值,或者关闭它并继续使用它。这里没有证据表明描述符泄漏或非关闭问题。 – EJP

+0

我在sendto()API中获得EBADF。 socket()和fcntl()使我获得成功。 –