当发送方按照此处指定的方式正常关闭套接字连接时,我尝试通过网络获取 0 的值。当我使用无阻塞呼叫时,在数据从发送方发送到接收方之前,我在 UDP 流中得到了 -1。发送原始数据后,当我关闭连接(尝试关闭套接字并关闭发送方的套接字)时,我仍然得到 -1 而不是 0 表示套接字已关闭。任何人都可以请帮助是否有任何方法可以得到相同的。
谢谢。
当发送方按照此处指定的方式正常关闭套接字连接时,我尝试通过网络获取 0 的值。当我使用无阻塞呼叫时,在数据从发送方发送到接收方之前,我在 UDP 流中得到了 -1。发送原始数据后,当我关闭连接(尝试关闭套接字并关闭发送方的套接字)时,我仍然得到 -1 而不是 0 表示套接字已关闭。任何人都可以请帮助是否有任何方法可以得到相同的。
谢谢。
当 UDP 套接字被close(2)
-ed 时,即使套接字被connect(2)
-ed,也不会发送任何内容。另一方面,TCP 启动四向连接拆除。看起来你混淆了这两种情况。
用于关闭的 UNIX 手册页说明以下内容:
返回值:
成功时,返回零。出错时,返回 -1,并适当设置 errno。
错误:
EBADF - sockfd 不是有效的描述符。
ENOTCONN - 指定的套接字未连接。
ENOTSOCK - sockfd 是一个文件,而不是一个套接字。
和windows平台有大同小异:
返回值
如果没有发生错误,shutdown 将返回零。否则,返回 SOCKET_ERROR 的值,并且可以通过调用 WSAGetLastError 来检索特定的错误代码。
事情是:UDP 不是面向连接的协议,并且 connect() 调用它并不意味着建立任何关联。
所以我猜,你实际上得到了 ENOTCONN 错误(或 WSAENOTCONN,如果你在 Windows 上)检查你的 errno(或 Windows 上的 WSAGetLastError())