gpt4 book ai didi

c - 即使绑定(bind)到给定端口的远程主机上的进程被终止,select()也会返回1

转载 作者:行者123 更新时间:2023-11-30 17:14:11 26 4
gpt4 key购买 nike

我编写了一个程序,使用非阻塞 connect()select() 组合来检查与远程主机的连接特定端口。 select() 也有一些超时值,在我的例子中是 2.5 秒。我正在测试该程序以连接到远程主机上运行 SMTP 服务的进程,该进程是它绑定(bind)到端口 25 。如果我终止在远程主机上运行的进程,则 select() 返回 1 来告诉该进程正在写入(添加套接字以写入 fd_set )是可能的。这背后的原因是什么,在这种情况下是否可以使用 select() 。我尝试使用 connect() ,当无法进行此类连接时,它会立即返回,但如果连接需要超时,它就不起作用,这就是我使用 select()< 的原因.

最佳答案

select() 不会告诉您可以读取或写入,它只是告诉您它不会阻塞(或者返回错误 EWOULDBLOCK,如果套接字处于非阻塞模式)。只要本地套接字缓冲区未满,套接字就始终可写。此外,如果在远程进程终止后发送了任何内容,您将收到一个 RST 数据包,并且在此之后尝试写入将立即返回 ECONNRESET。因此,当发生这种情况时,套接字将被标记为可写。

关于c - 即使绑定(bind)到给定端口的远程主机上的进程被终止,select()也会返回1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30451482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com