To change the maximum allowed backlog by your system (*nix machines only), first you need to find the variable for this limit:
sudo sysctl -a | grep somaxconn
On ubuntu boxes, it returns net.core.somaxconn (you need to look for the 'somaxconn' variable, the full name will vary across different systems).
Update this to a large number as follows:
sudo sysctl -w net.core.somaxconn=1024
This will work straight away. no restart required.
socket_listen
(PHP 4 >= 4.1.0, PHP 5)
socket_listen — Attend une connexion sur un socket
Description
$socket
[, int $backlog = 0
] )
Une fois que le socket socket a été
créé avec la fonction socket_create()
et liée à un nom avec la fonction
socket_bind(), il peut être mis en attente de la
connexion entrante.
socket_listen() ne fonctionne qu'avec des sockets de
type SOCK_STREAM et SOCK_SEQPACKET.
Liste de paramètres
-
socket -
Une ressource de socket valide, créée par la fonction socket_create().
-
backlog -
Un nombre maximum de
backlogconnexions seront mises en attente de traitement. Si une demande de connexion arrive et que la queue est pleine, le client recevra une erreur indiquant ECONNREFUSED, ou, si le protocole de support accepte les retransmissions, la requête sera ignorée pour que les tentatives ultérieures finissent par réussir.Note:
Le nombre maximum passé dans le paramètre
backlogdépend essentiellement de la plate-forme de support. Sur Linux, il est tronqué automatiquement àSOMAXCONN. Sous Windows, si la constanteSOMAXCONNest passée, le service responsable des sockets choisira une valeur maximum raisonnable. Il n'y a pas de méthode pour deviner la valeur réellement choisie.
Valeurs de retour
Cette fonction retourne TRUE en cas de
succès ou FALSE si une erreur survient. Le code d'erreur généré peut être obtenu en appelant la
fonction socket_last_error(). Ce code d'erreur
peut être passé à la fonction socket_strerror()
pour obtenir un message d'erreur humainement lisible.
Voir aussi
- socket_accept() - Accepte une connexion sur un socket
- socket_bind() - Lie un nom à un socket
- socket_connect() - Crée une connexion sur un socket
- socket_create() - Crée un socket
- socket_strerror() - Retourne une chaîne décrivant un message d'erreur
socket_listen() cannot be used for UDP communications as discussed below.
In addition, the example below discusses UDP connections, which only exist if the application manages them through a state table (the OS does not create a UDP connection upon receiving a datagram). Having a function named socket_connect() that determines the remote IP and port only confuses the matter by giving the indication of some sort of connection handshake between two hosts. Rather, socket_connect() only specifies the remote IP and port used by subsequent socket_send() calls. You can achieve the same effect by skipping socket_connect() altogether and specifying the remote IP and port in socket_sendto() calls.
If you find yourself writing a connection-based protocol on top of UDP, consider using TCP. If your application requires streaming data of some sort, use TCP to manage connections and control messages, and UDP to handle the streaming data (H.323 is an example of a suite of TCP and UDP protocols working in conjunction).
