2017-07-20 1 views
0

Je crée une prise UDP en utilisant:Comment trouver le port local d'une socket en PHP?

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

Quand j'utilise socket_getsockname pour obtenir le nom de socket:

/** 
    * 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; 
    } 

Le port retour est toujours 0 et l'adr est 0.0.0.0

Comment obtenir le port lié correctement?

+0

double possible de [Sockets, PHP, port local] (https://stackoverflow.com/questions/21640660/sockets-php-local-port – Dalton

+0

Ici le port retourné est toujours 0 et l'addr est 0.0.0.0 – ssk

+1

Eh oui, vous créez le socket mais vous ne le connectez pas: 'socket_connect ($ sock, $ server_ip_here, $ port_here)'; Après cela, il devrait retourner l'adresse IP et le port corrects. – icecub

Répondre

1

Binding la prise après la création fixe la question:

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()); 
}