2017-07-20 12 views
0

私が使用してUDPソケットを作成しています:私はソケット名を取得するためにsocket_getsocknameを使用する場合PHPでソケットのローカルポートを見つけるには?

$sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP); 

を:ポートが返さ

/** 
    * Get Source port (Refactored to allow unit testing) 
    * 
    * @return string 
    */ 
    private static function getSourcePort($sock) 
    { 
     $addr = null; 
     $port = null; 
     socket_getsockname($sock, $addr, $port); 
     return $port; 
    } 

は常に0で、addrが0.0.0.0です

バインドされたポートを正しく取得する方法はありますか。

+0

[ソケット、PHP、ローカルポート](の可能性のある重複https://stackoverflow.com/questions/21640660/sockets-php-local-port ) – Dalton

+0

ここで返されるポートは常に0で、addrは0.0.0.0です。 – ssk

+1

さて、あなたはソケットを作成していますが、接続していません: 'socket_connect($ sock、$ server_ip_here、$ port_here)';その後、正しいIPとポートを返します。 – icecub

答えて

1

作成が問題を修正した後にソケットをバインド:

if (socket_bind($sock, $sourceIp) === false) 
{ 
    $failReason = "socket_bind() failed: reason: " . socket_strerror(socket_last_error()); 
} 

// get the source port 
$sourcePort = 0; 
if (socket_getsockname($sock, $sourceIp, $sourcePort) === false) 
{ 
    $failReason = "socket_getsockname() failed: reason: " . socket_strerror(socket_last_error()); 
} 
関連する問題