2016-05-01 23 views
3

私は私が得たエラーメッセージがなぜファイル記述子に誤りがありますか?

Traceback (most recent call last): 
File "udpserv.py", line 7, in <module> 
(c,a) = s.recvfrom(1024) 
File "/usr/lib/python2.7/socket.py", line 174, in _dummy 
raise error(EBADF, 'Bad file descriptor') 
socket.error: [Errno 9] Bad file descriptor 

は、誰もが、私はこのエラーを得た方法を教えてくださいすることができました

from socket import * 

s = socket(AF_INET, SOCK_DGRAM) 
s.bind(('', 890)) 

while True: 
    (c,a) = s.recvfrom(1024) 
    msg = 'thanks for requesting' 
    s.sendto(msg,a) 
    s.close() 

を作ったUDPサーバプログラムのために、このコードの不正なファイルディスクリプタのためにエラーが発生しましたどのようにそれを解決するには?

答えて

4

closeソケットを使用してからrecvfromを再度呼び出すと、このエラーが発生します。

recvfromの行の後にprintを追加すると、recvfromの最初の呼び出しが期待どおりに機能することがわかります。 2回目の呼び出し(1回ループした後)は、表示されるエラーをスローします。

s.close()を削除するだけでコードを修正できます。 (あなたには、TCPとは対照的に、UDPにはその概念がないので、クライアントへの接続を閉じる必要はありません)

0

無限の期間ループ。私の場合は、

count = 0 
while (count < 10): 
    count += 1 
    #rest of the code 

while True: 

を置き換え