c - solaris 中套接字错误 EINPROGRESS 的可能原因是什么?

标签 c sockets tcp solaris

在 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/

相关文章:

c++ - 来自 TCP/IP 堆栈的网络传输时间

c - 发送固定长度的TCP帧

C 数组内存泄漏

c - 在带有双括号的宏函数中使用预处理器条件

c++ - 套接字和线程

java - Netty 4 中的阻塞

python - 你如何使用带 stunnel 的 Python 套接字?

c - libubox是否支持多线程

c - Rdefines.h 函数和宏的文档在哪里?

java - 实现可关闭的套接字/服务器套接字