1

我遇到了一些非常有趣的事情。寻求帮助。我有一个循环(30 次),在其中我调用 select() 来查找任何准备好写入的 fd。如果有,那么我调用 getsocktop(sfd, SOL_SOCKET, SO_ERROR, &ser, &serlen)。第一次通过循环 select() 返回一个“1”,所以我调用了 getsockopt(),它返回一个“没有到主机的路由”错误。然后我回到循环。我第二次调用 select() 时,它再次返回“1”,而这一次,当我调用 getsockopt() 时,它没有返回任何错误。这让我相信连接已经建立。但是当我在套接字 fd 上执行 getpeername() 时,它会返回一个“传输端点未连接”错误。

谁能告诉我为什么第二次调用 getsockopt() 时没有返回错误?

我在循环之前调用 connect(),它返回一个 EINPROGRESS,因为它是一个非阻塞套接字。

P:S - 当我在第一次调用 getsockopt() 时收到“连接被拒绝”错误时,也会发生同样的事情

4

0 回答 0