处理比缓冲区大小更大的帧
Handle larger frames than is the size of buffer
我创建了一个 UDP 通信器。如果我收到的消息大小大于 recv() 接受的大小,那么我想处理异常:
OSError: [WinError 10040] A message sent on a datagram socket was
larger than the internal message buffer or some other network limit,
or the buffer used to receive a datagram into was smaller than the
datagram itself.
我该怎么做?像这样处理 WinError 是否安全:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except WinError:
...do some job
我知道,WinError.h 是一个相当大的库,在我看来,在 try 块时,如果系统调用它们,我可能会处理其他一些 WinErrors...
在我看来,您可能正在使用套接字。
在这种情况下,如果您处理套接字错误,则不必处理特定的 OSError。
你可以这样做:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except socket.error, e:
#Do some job ex.
print "Error receiving data: %s" % e
sys.exit(1)
这样套接字将引发错误,您将捕获它,同时仍然会收到其他与您的套接字无关的错误,但它们是 OSErrors
参考,获取更多帮助:
https://www.networkcomputing.com/data-centers/python-network-programming-handling-socket-errors
我创建了一个 UDP 通信器。如果我收到的消息大小大于 recv() 接受的大小,那么我想处理异常:
OSError: [WinError 10040] A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram into was smaller than the datagram itself.
我该怎么做?像这样处理 WinError 是否安全:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except WinError:
...do some job
我知道,WinError.h 是一个相当大的库,在我看来,在 try 块时,如果系统调用它们,我可能会处理其他一些 WinErrors...
在我看来,您可能正在使用套接字。 在这种情况下,如果您处理套接字错误,则不必处理特定的 OSError。 你可以这样做:
try:
message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except socket.error, e:
#Do some job ex.
print "Error receiving data: %s" % e
sys.exit(1)
这样套接字将引发错误,您将捕获它,同时仍然会收到其他与您的套接字无关的错误,但它们是 OSErrors
参考,获取更多帮助: https://www.networkcomputing.com/data-centers/python-network-programming-handling-socket-errors