2007年9月16日日曜日

ActivePerlとLinuxのPerlで挙動が違う

ブロードキャストアドレスを指定したsend関数で挙動の違いがあります。
たとえばUDPパケットを送ろうと、次のようなsocketを作ります。
socket(SOCKET, PF_INET, SOCK_DGRAM, 0) ;

そして次のように送ろうとします。
send(SOCKET, $data, 0, $sock_addr) ;
この時もし$sock_addrがブロードキャスアドレスだった場合
WindowsのActivePerlなら問題なくブロードキャストできます。
LinuxのPerlだった場合はSocketの生成後に
setsockopt(SOCKET, SOL_SOCKET, SO_BROADCAST,1) ;
としてソケットオプションSO_BROADCASTを指定しなければエラーを返し、送信できません。

ソケットについては以下を参照して下さい。
Socket(2)
Socket(7)

0 件のコメント: