【发布时间】:2010-06-02 21:32:50
【问题描述】:
我有一个在 linux ubuntu 上运行的程序,它尝试使用 TCP 连接到服务器端口。 你能告诉我如何找出客户端套接字连接到 ubuntu 的服务器套接字的超时值吗?
谢谢。
【问题讨论】:
标签: networking sockets ubuntu
我有一个在 linux ubuntu 上运行的程序,它尝试使用 TCP 连接到服务器端口。 你能告诉我如何找出客户端套接字连接到 ubuntu 的服务器套接字的超时值吗?
谢谢。
【问题讨论】:
标签: networking sockets ubuntu
最好的、可移植的解决方案是使用你自己的超时来确保你可以依赖一个已知的值:
1) 在connect()ing 之前,将客户端套接字设置为非阻塞。使用ioctl() 和FIONBIO 标志或fcntl() 和O_NONBLOCK 标志。在 Win32 下,使用 ioctlsocket() 和 FIONBIO 标志。
2) connect() 到远程对等点:如果connect() 成功,那么你已经连接。
3) 但是,如果 connect() 返回 -1 并将 errno 设置为 EINPROGRESS(在 Win32 下为 WSAEWOULDBLOCK),则只需 select() 使用您自己的超时写入的套接字描述符。
【讨论】:
我首先查看getsockopt(3) 手册页(SO_RCVTIMEO)。不过,我敢肯定你的问题远不止这些。
【讨论】: