Position actuelle: Accueil> Derniers articles> Comment confirmer si socket_bind en php réussit? Quelle est la méthode de détection efficace?

Comment confirmer si socket_bind en php réussit? Quelle est la méthode de détection efficace?

gitbox 2025-08-11

1. La fonction de la fonction socket_bind ()

La fonction socket_bind () est utilisée pour lier une prise créée à une adresse IP et à un port spécifiques, garantissant que la prise peut accepter les demandes de connexion réseau à partir de l'adresse et du port correspondants.

 <span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);
</span></span>
  • $ socket : la ressource de socket qui doit être liée.

  • $ Adresse : L'adresse IP du serveur (peut être localhost ou 0.0.0.0 , etc.).

  • $ Port : le numéro de port à limiter.

Renvoie vrai si la liaison est réussie et fausse si elle échoue.


2. Comment vérifier si socket_bind () réussit?

Pour détecter si socket_bind () réussit, vous devez d'abord clarifier la valeur de retour de la fonction. Renvoie le vrai sur le succès et le faux sur l'échec. Mais s'appuyer uniquement sur la valeur de retour ne suffit pas. Vous pouvez également combiner socket_last_error () pour obtenir des informations d'erreur plus détaillées.

1. Utilisez la valeur de retour pour juger

Lorsque nous utilisons socket_bind () , nous vérifions généralement sa valeur de retour pour déterminer si elle réussit. Si la valeur de retour est fausse , cela signifie que la liaison a échoué.

 <span><span><span class="hljs-variable">$socket</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_create</span></span><span>(AF_INET, SOCK_STREAM, SOL_TCP);
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$socket</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket La création a échoué: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>());
    </span><span><span class="hljs-keyword">exit</span></span><span>;
}

</span><span><span class="hljs-variable">$address</span></span><span> = </span><span><span class="hljs-string">"127.0.0.1"</span></span><span>;
</span><span><span class="hljs-variable">$port</span></span><span> = </span><span><span class="hljs-number">8080</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_bind</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$address</span></span><span>, </span><span><span class="hljs-variable">$port</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket La reliure a échoué: "</span></span><span> . </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>));
    </span><span><span class="hljs-keyword">exit</span></span><span>;
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Socket Reliant réussi!"</span></span><span>;
}
</span></span>

2. Utilisez socket_last_error () pour obtenir des informations d'erreur

Lorsque socket_bind () renvoie false , utilisez socket_last_error () pour obtenir plus d'informations d'erreur. socket_last_error () Renvoie un code d'erreur, qui peut être converti en informations d'erreur faciles à comprendre à l'aide de socket_streror () .

 <span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> === </span><span><span class="hljs-literal">false</span></span><span>) {
    </span><span><span class="hljs-variable">$error_code</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_last_error</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>);
    </span><span><span class="hljs-variable">$error_message</span></span><span> = </span><span><span class="hljs-title function_ invoke__">socket_strerror</span></span><span>(</span><span><span class="hljs-variable">$error_code</span></span><span>);
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"La reliure a échoué,Code d&#39;erreur:<span class="hljs-subst">$error_code</span></span></span><span>,message d&#39;erreur:</span><span><span class="hljs-subst">$error_message</span></span><span>";
}
</span></span>

Les messages d'erreur courants incluent:

  • Adresse déjà utilisée

  • Permission refusée


3. Erreurs et solutions courantes

  1. Adresse déjà utilisée

    • Cause d'erreur: l'adresse IP et le port ont été liés par d'autres processus.

    • Solution: vérifiez si d'autres programmes utilisent le port ou modifiez le numéro de port utilisé.

  2. Permission refusée

    • Cause d'erreur: l'utilisateur actuel n'a pas de permissions suffisantes pour se lier à un port (en particulier les ports inférieurs à 1024).

    • Solution: essayez d'utiliser un port plus élevé ou exécutez le script avec les privilèges de l'administrateur.

  3. Argument non valide

    • Cause d'erreur: l'adresse IP ou le port transmis à socket_bind () est incorrect.

    • Solution: confirmez que l'adresse et le port entrants sont valides.


4. détecter l'état de la prise lié

Si vous souhaitez vérifier le programme si la prise liée est toujours valide, vous pouvez utiliser socket_getsockname () pour obtenir l'adresse et le port de la prise actuellement liés. Cette fonction renvoie les informations de liaison, et s'il n'y a pas de liaison réussie, la valeur de retour sera vide.

 <span><span><span class="hljs-variable">$bound_address</span></span><span> = </span><span><span class="hljs-string">''</span></span><span>;
</span><span><span class="hljs-variable">$bound_port</span></span><span> = </span><span><span class="hljs-number">0</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-title function_ invoke__">socket_getsockname</span></span><span>(</span><span><span class="hljs-variable">$socket</span></span><span>, </span><span><span class="hljs-variable">$bound_address</span></span><span>, </span><span><span class="hljs-variable">$bound_port</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Prise à jour pour s&#39;adresser <span class="hljs-subst">$bound_address</span></span></span><span> et ports </span><span><span class="hljs-subst">$bound_port</span></span><span>";
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"套接字La reliure a échoué"</span></span><span>;
}
</span></span>