如何在关机调用后的UDP recvfrom()调用中获得0的返回值。

时间:2012-11-28 14:45:05

标签: c++ networking udp

我已尝试在发件人按指定here正常关闭套接字连接时,通过网络获取值0。当我使用未阻塞的呼叫时,我在UDP流中获得-1,然后数据从发送方发送到接收方。发送原始数据后,当我关闭连接(尝试关闭套接字并关闭发送方的套接字)时,我仍然得到-1而不是0表示套接字已经关闭。任何人都可以帮忙,有没有办法得到相同的。

感谢。

2 个答案:

答案 0 :(得分:3)

当UDP套接字为close(2)时,即使套接字为connect(2),也没有发送任何内容。另一方面,TCP启动four-way connection tear-down。看起来你混淆了这两种情况。

答案 1 :(得分:1)

关闭states的UNIX手册页如下:

  

返回值:

     

成功时,返回零。出错时,返回-1,   和errno设置得当。

     

错误:

     

EBADF - sockfd不是有效的描述符   ENOTCONN - 未连接指定的插座   ENOTSOCK - sockfd是一个文件,而不是套接字。

与Windows平台have完全相同:

  

返回值

     

如果没有错误发生,则shutdown返回零。否则,值为   返回SOCKET_ERROR,可以检索特定的错误代码   通过调用WSAGetLastError。

事情是:UDP不是面向连接的协议,而connect()调用它并不意味着任何关联都是建立的。

所以我的猜测,你实际上是在收到ENOTCONN错误(或WSAENOTCONN,如果你在Windows上) 检查你的errno(或Windows上的WSAGetLastError())

相关问题