在 Solaris 中出现套接字错误 EINPROGRESS
的可能原因是什么?
我们如何检查根本原因?
tcp api 是:连接
最佳答案
你有一个非阻塞套接字,你正在其中调用 connect()
。由于 connect()
需要发生 3 次握手(因此网络往返),它要么在阻塞套接字中阻塞等待 SYN-ACK,要么给你一些它没有成功的指示但在非阻塞套接字中。通常,非阻塞套接字返回 EAGAIN/EWOULDBLOCK 告诉你他们不能前进,你应该再试一次:这不是你的情况, connect()
返回 EAGAIN/EWOULDBLOCK 当没有免费的临时端口告诉你应该稍后再试;所以非阻塞连接还有另一个错误:EINPROGRESS,它告诉你操作正在进行中,你应该稍后检查它的状态。
要稍后检查状态,套接字将准备好写入,因此您可以使用 select()
/poll()/...
进行测试,之后您将必须 getsockopt(...SO_ERROR...)
以获取 connect() 操作的成功/失败状态。
关于c - solaris 中套接字错误 EINPROGRESS 的可能原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8277970/