处理比缓冲区大小更大的帧

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