首页 > 解决方案 > 处理比缓冲区大小更大的帧

问题描述

我创建了一个 UDP 通信器。如果我收到大小大于 recv() 接受的消息,那么我想处理异常:

OSError: [WinError 10040] 在数据报套接字上发送的消息大于内部消息缓冲区或其他网络限制,或者用于接收数据报的缓冲区小于数据报本身。

我怎样才能做到这一点?处理 WinError 是否安全,例如:

try:
    message, comm_point = self.clientSocket.recvfrom(MSG_SIZE)
except WinError:
    ...do some job

我知道,WinError.h 是一个相当大的库,在我看来,在 try 块时,我可能会处理一些其他 WinErrors,如果系统调用它们......

标签: pythonsocketserror-handlingruntime-error

解决方案


在我看来,您可能正在使用套接字。在这种情况下,如果您处理套接字错误,则不必处理特定的 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


推荐阅读