红宝石的TCPSocket的recv阻塞不退还
-
24-09-2019 - |
题
所以,我有以下代码:
def LSCPHandler.send_message(message, hostname, port)
s = TCPSocket.open(hostname, port)
s.print message
ret = s.recv(1024)
s.close
LSCPHandler.parse_error(ret)
return ret
端
刚刚精品工程,正常。服务器我说要返回响应很快,通常情况下,一切都很好。
然后,今天出事了与服务器。不是我的问题,但是,这导致了我的整个应用程序挂,等待的recv超时。这不正是最佳。
有没有办法超时recv的,如果我回去马上不”听到什么了?我试图寻找红宝石文档,但它确实让我困惑(即的TCPSocket只实现了三个方法,他们没有打开或recv,它的父类的Socket没有任何implemente这些方法。而Socket的父类似乎对象?我throughly混淆)
解决方案
您可以设置接收套接字上的超时套接字选项的东西比默认别人。棘手位是选择一个合适的数字,在所有用例仍然有效,即你不希望你的recv
呼叫超时为时尚早。
s.setsockopt(Socket::SOL_SOCKET, Socket::SO_RCVTIMEO, <timeout>)
不隶属于 StackOverflow