是否可以确保非阻塞连接因EINPROGRESS而失败?

时间:2018-07-11 11:11:37

标签: sockets

如果我将套接字设置为非阻塞操作,则如下:

int fd = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK, IPPROTO_TCP);
int rc = connect(fd, (struct sockaddr *)&addr, sizeof(addr));

...是否保证connect失败并失败EINPROGRESS,还是我需要处理立即成功的情况?

2 个答案:

答案 0 :(得分:3)

不一定。连接到127.0.0.1可能会立即连接或失败。

答案 1 :(得分:2)

您需要处理立即成功的情况。这就是为什么它返回0或-1的原因。对于非阻塞模式,文档没有任何例外。