Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
o异常(因此在Python中您永远不会得到-1)_Python_Sockets_Recv - Fatal编程技术网

o异常(因此在Python中您永远不会得到-1)

o异常(因此在Python中您永远不会得到-1),python,sockets,recv,Python,Sockets,Recv,无论如何,0不是一个错误。这是另一方关闭连接的信息。也许这是完全正确的情况,Python(或任何其他语言)都无法知道这一点。如果服务器正在计算响应,该怎么办?如果“还没有数据”和“不再有人”都返回0,我如何区分它们?@Jay你读过黄色的黑色文本了吗?它列出了返回值为0的3种情况。您的案例属于哪种情况?无序关闭(服务器套接字上的ctrl-c)@Jay没有真正可靠的方法来确定对等方是否处于活动状态。你能做的最好的事情就是实现一些ping机制。如果套接字是非阻塞的,你会得到阻塞调用或异常。如果服务器正

无论如何,0不是一个错误。这是另一方关闭连接的信息。也许这是完全正确的情况,Python(或任何其他语言)都无法知道这一点。

如果服务器正在计算响应,该怎么办?如果“还没有数据”和“不再有人”都返回0,我如何区分它们?@Jay你读过黄色的黑色文本了吗?它列出了返回值为0的3种情况。您的案例属于哪种情况?无序关闭(服务器套接字上的ctrl-c)@Jay没有真正可靠的方法来确定对等方是否处于活动状态。你能做的最好的事情就是实现一些ping机制。如果套接字是非阻塞的,你会得到阻塞调用或异常。如果服务器正在计算响应呢?如果“还没有数据”和“不再有人”都返回0,我如何区分它们?@Jay你读过黄色的黑色文本了吗?它列出了返回值为0的3种情况。您的案例属于哪种情况?无序关闭(服务器套接字上的ctrl-c)@Jay没有真正可靠的方法来确定对等方是否处于活动状态。你能做的最好的事情就是实现一些ping机制。如果套接字是非阻塞的,你会得到阻塞调用或异常。如果套接字关闭,非阻塞模式下的recv()是否返回-1?@Jay,正如我说的:recv()永远不会返回-1。连接关闭时,recv()始终返回0。当连接打开且套接字阻塞时,recv()将等待数据。如果conenction处于打开状态且套接字处于非阻塞状态,则recv()将在数据不可用时引发异常。但该异常仍然表示没有数据或连接已关闭,对吗?@Jay否,recv()中的异常永远不会表示“连接已关闭”。正如我所说:只有返回值0表示连接已关闭。这真的不清楚我发布了什么吗?然而,异常可能意味着其他事情,你必须检查异常对象。你是说,在非阻塞模式下,异常意味着没有数据,而0意味着连接关闭?这听起来是可行的。如果套接字关闭,则非阻塞模式下的recv()返回-1?@Jay,正如我所说:recv()永远不会返回-1。连接关闭时,recv()始终返回0。当连接打开且套接字阻塞时,recv()将等待数据。如果conenction处于打开状态且套接字处于非阻塞状态,则recv()将在数据不可用时引发异常。但该异常仍然表示没有数据或连接已关闭,对吗?@Jay否,recv()中的异常永远不会表示“连接已关闭”。正如我所说:只有返回值0表示连接已关闭。这真的不清楚我发布了什么吗?然而,异常可能意味着其他事情,你必须检查异常对象。你是说,在非阻塞模式下,异常意味着没有数据,而0意味着连接关闭?这听起来可行