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