2013-09-23 59 views
1

2048個字節我不得不反覆調用函數來獲取所有數據,考慮到len參數設置爲10240。但是,這導致在過去的封鎖。我如何獲得所有數據並以平臺獨立的方式安全返回?recvfrom的()只獲得了從UDP套接字

順便說一句,我就使用netcat在發送側:

貓ocr_pi.png | nc -u服務器5555

這個問題是否與nc的行爲有關?我沒有找到任何設置UDP數據包大小的參數(-O代表TCP)。 謝謝。

回答

2

UDP作爲消息發送和接收數據。在len參數中,您告訴recvfrom()您可以接收到的最大郵件大小,然後recvfrom()將等待直到完整郵件到達,而不管其大小。 UDP消息是獨立的。與TCP不同,UDP消息不能部分發送/接收。這是一件全有或全無的事情。如果收到的消息的大小大於您指定的值len,則該消息將被丟棄並且出現錯誤。

recvfrom()塊的唯一方法是沒有可讀取的消息。如果您不希望阻止,使用select()(或pselect()epoll或其他平臺等值)到指定超時等待消息的到達,然後調用recvfrom()只有當實際有東西可以讀。