Linux 上套接字的连接超时是多少
我有一个在 linux ubuntu 上运行的程序,它尝试使用 TCP 连接到服务器端口。 你能告诉我如何找出连接到 ubuntu 服务器套接字的客户端套接字的超时值吗?
谢谢。
I have a programming running on linux ubuntu which tries to connect to a server port using TCP.
Can you please tell me how can I find out that is timeout value for a client socket connecting to a server socket for ubuntu?
Thank you.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
最好的、可移植的解决方案是使用您自己的超时来确保您可以依赖已知值:
1) 在
connect()
之前,将客户端套接字设置为非阻塞。使用ioctl()
和FIONBIO
标志或fcntl()
和O_NONBLOCK
标志。在 Win32 下,使用ioctlsocket()
和FIONBIO
标志。2)
connect()
到远程对等点:如果connect()
成功,那么您就已连接。3) 但是,如果
connect()
返回-1并将errno
设置为EINPROGRESS
(Win32下的WSAEWOULDBLOCK
),只需select()
用于使用您自己的超时进行写入的套接字描述符。The best, portable solution is to use your own timeout to be sure you can rely on a known value :
1) before
connect()
ing, set the client socket to be non-blocking. Useioctl()
and theFIONBIO
flag orfcntl()
andO_NONBLOCK
flags. Under Win32, useioctlsocket()
andFIONBIO
flag.2)
connect()
to the remote peer : ifconnect()
succeed, all right, you are connected.3) However if
connect()
returns -1 and seterrno
toEINPROGRESS
(WSAEWOULDBLOCK
under Win32), justselect()
the socket descriptor for writing with your own timeout.我首先查看
getsockopt(3)
手册页 (SO_RCVTIMEO)。但我确信你的问题不止于此。I'd start by looking at the
getsockopt(3)
man page (SO_RCVTIMEO). However I'm sure there's more to your question than that.