Newsgroup: it.comp.www.php
Titolo: SOMAXCONN e php

Ciao :)
Qualcosa non mi è chiaro.
Perché delle chat scritte in java o in C il numero di connessioni ammesse 
possono essere tranquillamente oltre le migliaia (penso ai server irc ed 
alcuni programmi java vendibili), e invece per il php tramite la funzione 
socket_listen il numero di connessioni è vincolato dalla costante SOMAXCONN 
default a 128 in Unix e nel mio pc windows troncato a 64?
Il valore di tale costante credo sia definita a basso livello, quindi come 
fanno altri linguaggi a tenere un numero così elevato di connessioni?
Per caso non sono connessioni fisse?
ringrazio anticipatamente :)
ciao,
Luca(riello)

 connessioni?
Caspita....interessa anche a me la risposta!
Speriamo che qualcuno la dia.....;-)
ciaoo,
rob4you 

default a 128 in Unix e nel mio pc windows troncato a 64?
SOMAXCONN non e' quello che pensi tu. SOMAXCONN indica il numero massimo
di connessioni "in attesa di apertura". In pratica, quante *RICHIESTE DI
CONNESSIONE* puoi ricevere nel tempo richiesto a smaltirle.
Ma non e' il "massimo numero di connessioni apribili".
Naturalmente, se io ti mando SOMAXCONN SYN e poi non rispondo a nessuno,
le tue connessioni non saranno smaltite mai, e il sistema ti si blocca -
avrei compiuto un SYN-flood DoS - salvo adozione di misure speciali, sul
tipo dei SYN-cookie.
Normalmente, un tizio ti manda un SYN, il sistema risponde con SYN+ACK e
va ad occuparti uno "slot" dei SOMAXCONN disponibili, il tizio riceve il
SYN+ACK e risponde con ACK, e il sistema libera lo "slot" spostandolo in
un pool molto piu' grosso insieme alle altre 950 connessioni che ha gia'
aperte :-)
Tutto questo se ho capito giusto e se mi ricordo bene [1].
Una pagina interessante e in italiano (per Linux, pero'):
http://publib.boulder.ibm.com/wasce/V1.0.1/it/Tasks/Tuning/Linux.html
Leonardo
[1] probabilita' cumulata = 16.27%
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

 CONNESSIONE* puoi ricevere nel tempo richiesto a smaltirle.
Ciao Leonardo e grazie per la risposta :)
Il problema è proprio qui... nella chat che ho fatto il server gestisce 
delle connessioni su una porta tramite un mio script php! Ma le connessioni, 
una volta accettate, rimangono "established" finché il client o il server 
non le chiude (quindi rimangono aperte per tutta la durata della sessione di 
chat: 10min 20min 1h)...
Il che significa che le connessioni non vengono "smaltite" in tempi brevi.
Ora credevo fosse normale usare connessioni persistenti 
chatter(client)<->server per una chat che sfrutta i socket. Ma questo limite 
così basso di somaxconn mi ha messo il dubbio.
Fermo restando che ho letto che questo valore si può tranquillamente 
aumentare ricompilando il kernel, oltre il migliaio, mi domando se è questa 
la strada (non ho trovato documentazioni sufficienti).
I server che gestiscono migliaia di connessioni (penso ai server IRC) non 
utilizzano connessioni persistenti? Aprono e chiudono di volta in volta le 
connessioni? Ma così si dovrebbe perdere il real-time cosa che non mi pare 
affatto perduta.
Ti ringrazio comunque per il link e per la risposta
Luca(riello) 

utilizzano connessioni persistenti?
Penso di si'. Con SOMAXCONN di 64, puoi creare, al massimo, diciamo 64
nuove connessioni ogni secondo [1].
E quindi dopo 100 secondi che ti martellano, avrai 6400 connessioni in
stato di ESTABLISHED.
Non c'e' problema.
Se *HAI* problemi, il guaio dev'essere altrove.
Leonardo
[1] il periodo non e' "un secondo", ma si fa per fissare le idee.


 Se *HAI* problemi, il guaio dev'essere altrove.
Leggermente rincuorato :)
Però effettivamente quando provo la chat in locale sul mio pc (winXP), posso 
far entrare fino a 64 utenti. Quando entra il 64esimo il php (giusto per 
ritornare in tema) mi restituisce un errore:
"Cercando di utilizzare un argomento del puntatore in una chiamata, il 
sistema ha rilevato un indirizzo del puntatore non valido"
e chiude il server.
Un errore che ho visto, cercando in rete, capitare anche con programmi p2p 
quando ci sono troppe connessioni. Credevo fosse legato al somaxconn che il 
win non ha come costante ma che comunque è come se l'avesse dato che 
'accetta un massimo "ragionevole" di connessioni'.
Appena mi è possibile proverò con unix a far entrare 128 utenti e vedere che 
succede.
grazie
Ciao,
Luca(riello)
 

sistema ha rilevato un indirizzo del puntatore non valido"
Uhm. Controlla se esiste e se e' definita la chiave di registro
HKLM\System\CurrentControlSet\Services\Tcpip\Parameters
...inoltre, come fai entrare (in quanto tempo) quegli utenti? Perche' XP
SP2 mi pare che avesse una policy in merito.
Controlla se mai anche cosa compare nell'Event Viewer...
Leonardo


 Controlla se mai anche cosa compare nell'Event Viewer...
no... non viene scritto nulla. :s
ciao,
Luca(riello)