|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Sep 2003
Città: Angri - Milano
Messaggi: 358
|
[C++] Socket queue
Ciao Ragazzi,
è possibile sapere la dimensione della coda di socket. Praticamente io ho un server che invia ad un client una certa mole di dati, e con connessioni lente (tipo modem 56 K) capita che il server non riesca ad inviare i dati al client e li tenga in coda, questa coda aumenta facendo aumentare la memoria occupata dall'applicativo server(praticamente quello che si vede nel Task Manager). La soluzione ideale sarebbe conoscere la dimensione della coda da poter cosi fissare un massimo e fermare temporaneamente l'invio finchè la coda non rientra nei livelli prestabiliti. Ciao Zelig
__________________
Siamo eredi del nostro passato, il futuro è l'unica possibilità di rinascita. XBOXGamerTAG:nightwish78 Dell Studio XPS 16 (1645)-FullHD RGBLed-Intel Core i7 820QM-4GB DDR3-ATI HD 4670 1GB DDR3-HD 320GB 7200 rpm flickr |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Dovrebbe essere gestito automaticamente da s/o. Non so come funzionino le cose sui winsock, ma è ragionevole che ci sia un limite oltre il quale il socket non permette scritture "atomiche". Questo vuol dire che il tuo programma non dovrebbe continuare a richiedere memoria indefinitamente. L'unica spiegazione che ho è che stai usando un layer di astrazione con i winsock che contiene un proprio buffer interno, che viene lasciato crescere senza limiti ragionevoli.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Sep 2003
Città: Angri - Milano
Messaggi: 358
|
Quote:
Grazie
__________________
Siamo eredi del nostro passato, il futuro è l'unica possibilità di rinascita. XBOXGamerTAG:nightwish78 Dell Studio XPS 16 (1645)-FullHD RGBLed-Intel Core i7 820QM-4GB DDR3-ATI HD 4670 1GB DDR3-HD 320GB 7200 rpm flickr |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Non essendo un esperto di winsock non so risponderti a questa domanda (dovresti vederlo facilmente in winsock2.hlp, distribuito con molti compilatori); ti segnalavo solo la possibilità che il problema potesse essere altrove, se non usi winsock direttamente.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Cmq una rapida ricerca con Google rivela che hai a disposizione la classica funzione BSD getsockopt che ti consente di vedere la dimensione dei buffer in tx e rx (SO_RCVBUF e SO_SNDBUF). Il problema tuo è sapere quanto del buffer è attualmente utilizzato; sotto i sistemi unix si usa una ioctl.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Sep 2003
Città: Angri - Milano
Messaggi: 358
|
Quote:
cioè quanto del buffer è attualmente utilizzato. Grazie cmq ciao zelig
__________________
Siamo eredi del nostro passato, il futuro è l'unica possibilità di rinascita. XBOXGamerTAG:nightwish78 Dell Studio XPS 16 (1645)-FullHD RGBLed-Intel Core i7 820QM-4GB DDR3-ATI HD 4670 1GB DDR3-HD 320GB 7200 rpm flickr |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Comunque se leggi la documentazione delle winsock vedrai che WSASend (e send) è bloccante se il buffer è pieno e il socket è bloccante, oppure "rifiuta" i dati se il buffer è pieno e il socket non bloccante. Quindi le winsock non possono essere l'origine del consumo di memoria "illimitato".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:05.