5

複数のUDPクライアントが同じポートでブロードキャストをリッスンする必要がある場合、 SO_REUSEPORT ソケットオプションを使用することを提案する複数の回答が見つかりました。ただし、このオプションを使用できないというエラーが表示されます。Python 2.7 の使用

from socket import *
s = socket(AF_INET, SOCK_DGRAM)
s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
try:
    s.bind(('', MYPORT))
except:
    print "Error connecting to the UDP stream."


Traceback (most recent call last):
  File "qsorder.py", line 119, in <module>
    s.setsockopt(SOL_SOCKET, SO_REUSEPORT, 1)
NameError: name 'SO_REUSEPORT' is not defined

SO_REUSEADDR を試してみましたが、エラーは発生しませんが、ブロードキャストを受信するクライアントは 1 つだけです。これを回避する方法はありますか?

4

1 に答える 1

3

SO_BROADCAST各ソケットでオプションを設定する必要があります。

s.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)

SO_REUSEPORTSO_REUSEADDRは標準ではなく、通常はサポートされている場合と同じことを意味します。

于 2012-11-30T03:51:52.737 に答える