我只看到 EAGAIN 在这种情况下返回,就像您在没有数据可读取的情况下看到的一样。对于写入未连接的套接字,您通常会得到 ENOTCONN,尽管我相信某些平台可能会给您 EAGAIN。
这是一个简单的 Python 脚本来演示:
import socket
# Any address that does not succeed or fail right away will do
ADDR = "192.168.100.100"
PORT = 23
s = socket.socket()
s.setblocking(False)
try:
s.connect((ADDR, PORT))
except socket.error, e:
print "Connect gave us",e
try:
s.recv(1)
except socket.error, e:
print "Read gave us",e
try:
s.send("x")
except socket.error, e:
print "Write gave us",e
对我来说,它给出了: Connect 给了我们(36,'Operation now in progress') Read 给了我们(35,'Resource暂时不可用')Write 给了我们(57,'Socket is not connected')
它们分别是 EINPROGRESS、EAGAIN 和 ENOTCONN。