Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Tra audio e AI: la ricetta di Qualcomm per l'agentic AI
Snapdragon Soung Gen 2 è la piattaforma Qualcomm per i dispositivi audio sempre più integrati nel mondo dell'intelligenza artificiale: al prorpio interno tanta potenza elaborativa per gestire al meglio le necessità d'uso dell'agentic AI
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6
In occasione del proprio Snapdragon Summit Qualcomm annuncia i due nuovi chip per dispositivi mobile di fascia alta che entreranno nel mercato nel corso del 2027: tanta potenza a disposizione per elaborazioni di intelligenza artificiale sempre più complesse
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole!
Hogwarts arriva in fascia media grazie a realme, con una special edition che unisce la Quadra Light-Sensing Color-changing Tech, un baule in stile Hogwarts Express pieno di collezionabili e una scheda tecnica sostanzialmente identica al 16 Pro di partenza: ecco cosa cambia davvero, come si comporta nell'uso quotidiano e quanto vale in base al prezzo di 699,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 22-06-2008, 10:48   #1
Fede_Reghe
Member
 
L'Avatar di Fede_Reghe
 
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
[C++/Unix] Chiusura socket

Ho un programma C++ che apre un socket in listen e fa tutto quello che deve fare Il problema nasce quando devo riavviarlo, gli invio un kill SIGTERM da shell di linux e se tento di riavviarlo ho l'errore "BIND FAILED", come se la porta fosse ancora occupata. L'unico modo è attendere una decina di minuti o riavviare il sistema.

Esiste un comando linux o qualche riga C++ che mi permette di chiudere il socket zombie del programma chiuso?
__________________
Federica
Fede_Reghe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 10:55   #2
vizzz
Senior Member
 
L'Avatar di vizzz
 
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
Quote:
Originariamente inviato da Fede_Reghe Guarda i messaggi
Ho un programma C++ che apre un socket in listen e fa tutto quello che deve fare Il problema nasce quando devo riavviarlo, gli invio un kill SIGTERM da shell di linux e se tento di riavviarlo ho l'errore "BIND FAILED", come se la porta fosse ancora occupata. L'unico modo è attendere una decina di minuti o riavviare il sistema.

Esiste un comando linux o qualche riga C++ che mi permette di chiudere il socket zombie del programma chiuso?
potresti gestire il segnale SIGTERM nel tuo programma e forzare la chiusura del socket.
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
vizzz è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 10:56   #3
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
bello Linux, bel sistema
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 11:00   #4
Fede_Reghe
Member
 
L'Avatar di Fede_Reghe
 
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
Quote:
Originariamente inviato da vizzz Guarda i messaggi
potresti gestire il segnale SIGTERM nel tuo programma e forzare la chiusura del socket.
googlando ho trovato che posso utilizzare la funzione

signal(SIGTERM, funzione);

Ma precisamente, dove va messa? nel main() all'inizio del programma?
__________________
Federica
Fede_Reghe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 11:05   #5
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
bello Linux, bel sistema
ma come sei monotono...inoltre un post che non serve a nulla (come questo rigo, ma almeno dopo ho scritto altro )

Quote:
Originariamente inviato da Fede_Reghe Guarda i messaggi
Ho un programma C++ che apre un socket in listen e fa tutto quello che deve fare Il problema nasce quando devo riavviarlo, gli invio un kill SIGTERM da shell di linux e se tento di riavviarlo ho l'errore "BIND FAILED", come se la porta fosse ancora occupata. L'unico modo è attendere una decina di minuti o riavviare il sistema.
Esiste un comando linux o qualche riga C++ che mi permette di chiudere il socket zombie del programma chiuso?

Se ho ccapito bene, per risolvere dovresti cambiare un'opzione del socket, è giusto un rigo di codice, ma non lo dicordo , in modo che si connetta di nuovo ad un indirizzo "già in uso" e cosi la bind non ti da più problemi.

EDIT:
Quote:
Originariamente inviato da Fede_Reghe Guarda i messaggi
googlando ho trovato che posso utilizzare la funzione

signal(SIGTERM, funzione);

Ma precisamente, dove va messa? nel main() all'inizio del programma?
la devi mettere nel main...all'inizio. Poi ti crei la funzione "funzione" e li dentro chiudi il socket.
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 11:11   #6
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
ma come sei monotono...
abbi pazienza, ma da sempre il mondo è popolato da contaballe che me lo rifilano come il sistema più sicuro del mondo che "non permette ai processi di prendersi tutte le risorse che vogliono", "al contrario di Windows"

edit - anzi, al contrario del "sistema di mamma M$"
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 11:23   #7
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
hai cambiato l'avatar apposta??

cmq ognuno la pensa come vuole...c'è chi preferisce windows, virus, antivirus, anti questo e quello..chi ama linux coi problemoni irrisolvibili delle socket....ma a me non interessa (e cmq in questa discussione non c'entra nulla)

Solo è inutile dire "bello linux", quando Fede_Reghe ha chiesto tutta un altra cosa...e come se andassi nella sezione di windows e per ogni problema che qualcuno posta, io scrivessi "bello windows"....
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 11:24   #8
Fede_Reghe
Member
 
L'Avatar di Fede_Reghe
 
Iscritto dal: Dec 2006
Città: Firenze
Messaggi: 118
Grazie a tutti! Gestendo i segnali, e chiudendo la socket, it's all ok!
__________________
Federica
Fede_Reghe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 12:48   #9
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
e come se andassi nella sezione di windows e per ogni problema che qualcuno posta, io scrivessi "bello windows"....
ennò bello mio, c'è problema e problema: che un processo possa causare un leak a livello di sistema mi pare abbastanza scandaloso...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 13:25   #10
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
ennò bello mio, c'è problema e problema: che un processo possa causare un leak a livello di sistema mi pare abbastanza scandaloso...
ennò bello mio, c'è problema e problema: che un processo possa da solo cancellare l'intero sistema, compresa la cartella di windows e il suo registro, senza restrizioni mi pare abbastanza scandaloso...
(non posso farti l'esempio dei socket su winzoz perchè non sò come funzionano li )

cmq se avesse inserito la gestione dei segnali oppure l'opzione sulla socket, questo problema non si avrebbe avuto...Inoltre il suo problema è che, quando riavvia il programma (credo sia il client ma il discorso è sempre lo stesso), la porta che usa risulta ancora occupata. Per questo la bind ritorna errore....non c'è nessun problema di memoria...anzi.

sullo Stevens o gapil se ne parla...
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 13:31   #11
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
ennò bello mio, c'è problema e problema: che un processo possa da solo cancellare l'intero sistema, compresa la cartella di windows e il suo registro, senza restrizioni mi pare abbastanza scandaloso...
Sono proprio curioso di vedere come questo sarebbe possibile in Windows Vista
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 13:39   #12
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da Albi89 Guarda i messaggi
Sono proprio curioso di vedere come questo sarebbe possibile in Windows Vista
non lo è?

è stato inserito una sorta di "root"?? Se è cosi sono contento..finalmente dove 8 versioni di windows hanno fatto una cosa utile....cmq spiegami, sono curioso
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 14:30   #13
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
ennò bello mio, c'è problema e problema: che un processo possa da solo cancellare l'intero sistema, compresa la cartella di windows e il suo registro, senza restrizioni mi pare abbastanza scandaloso...
cheeee????
guarda, pure da Windows XP (lasciando perdere account amministrativi vs. LUA e menate varie), apri esplora risorse e dimmi se riesci a cancellare ntoskrnl.exe

se hai paura di riuscirci (lol ) fallo su una macchina virtuale.


Quote:
(non posso farti l'esempio dei socket su winzoz perchè non sò come funzionano li )
quasi identici purtroppo


Quote:
cmq se avesse inserito la gestione dei segnali oppure l'opzione sulla socket, questo problema non si avrebbe avuto...
un po' come il multitasking cooperativo di Windows 3.1: concediamo la CPU al processo di turno e fidiamoci che la restituisca


Quote:
Inoltre il suo problema è che, quando riavvia il programma (credo sia il client ma il discorso è sempre lo stesso), la porta che usa risulta ancora occupata. Per questo la bind ritorna errore....non c'è nessun problema di memoria...anzi.
dici? e se io scrivo un programma idiotissimo che con un for apre tutte e 65535 le porte e lo termino brutalmente? il problema non è tanto di memoria...
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 14:52   #14
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
non lo è?

è stato inserito una sorta di "root"?? Se è cosi sono contento..finalmente dove 8 versioni di windows hanno fatto una cosa utile....cmq spiegami, sono curioso
Sì qualcosa di simile, anche se non ti saprei dire i dettagli con precisione.

In ogni caso anche quando si è loggati con un account che ha privilegi di amministratore, è necessario confermare ogni operazione su file che non si trovano nelle cartella Utente dell'utente in questione (un po' come la tua home in Linux).

E' molto, molto difficile che qualcosa riesca a farti danni seri senza che tu gli dica esplicitamente "puoi farlo".
D'altra parte, non è che l'utente neofita medio di Ubuntu si faccia troppi problemi a scrivere sudo, quindi la componente di rischio è circa equivalente.

Anche per questo molto software vetusto è incompatibile con win vista, dato che cerca di scrivere file di configurazione e dati direttamente nella cartella programmi, cosa che nn possono fare se non lanciati con espliciti permessi.

Che poi io appoggi win vista e il mio giudizio possa essere di parte non c'è dubbio. Fattostà che, lentezza di avvio a parte, è il sistema più vicino alle mie esigenze che abbia provato.
Ma è anche vero che la lentezza d'avvio è dovuta al fatto che non riesco a resistere all'orologio e al calendario sulla sidebar, e allo sfondo con le foto delle vacanze, e alle finestrelle trasparenti...
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 15:07   #15
71104
Bannato
 
L'Avatar di 71104
 
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
Quote:
Originariamente inviato da Albi89 Guarda i messaggi
Sì qualcosa di simile, anche se non ti saprei dire i dettagli con precisione.
non è stato "introdotto" nulla di simile: il sistema di sicurezza al 90% c'era già ed era già molto più flessibile di quello di Linux; ciò che è stato introdotto sono nuove features come le etichette di integrità e l'ormai arcinoto UAC.


Quote:
In ogni caso anche quando si è loggati con un account che ha privilegi di amministratore, è necessario confermare ogni operazione su file che non si trovano nelle cartella Utente dell'utente in questione (un po' come la tua home in Linux).
non è detto: le operazioni che richiedono permessi elevati potrebbero venir negate direttamente e senza la presentazione di alcun messaggio di conferma all'utente. tale comportamento dipende da come è scritto il manifest dell'applicazione, sempre che ne abbia uno visto che c'è ancora gente che programma col MinGW in Dev-C++


Quote:
E' molto, molto difficile che qualcosa riesca a farti danni seri senza che tu gli dica esplicitamente "puoi farlo".
D'altra parte, non è che l'utente neofita medio di Ubuntu si faccia troppi problemi a scrivere sudo, quindi la componente di rischio è circa equivalente.
anzi: su Windows l'unico utente che di default ha il permesso di logon è SYSTEM.
71104 è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 15:13   #16
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
cheeee????
guarda, pure da Windows XP (lasciando perdere account amministrativi vs. LUA e menate varie), apri esplora risorse e dimmi se riesci a cancellare ntoskrnl.exe

se hai paura di riuscirci (lol ) fallo su una macchina virtuale.
beh...essendo il file in esecuzione non lo cancella..ma cancella il resto...poi riavvia (perchè windows alla minima cosa devi riavviare) e vedi cosa ti trovi. E poi un virus potrebbe fare questo e molti altri danni. E non mi risulta che virus NON hanno causato il blocco del sistema...anzi riescono a fare quello che vogliono...sbaglio?
Se non avessi un antivirus, il pc lo dovrei formattare dopo 30 secondi (provato)...con un antivirus stò più o meno apposto, ma il pc non rende allo stesso modo (almeno quelli che non usano gli ultimi pc)

Quote:
un po' come il multitasking cooperativo di Windows 3.1: concediamo la CPU al processo di turno e fidiamoci che la restituisca

dici? e se io scrivo un programma idiotissimo che con un for apre tutte e 65535 le porte e lo termino brutalmente? il problema non è tanto di memoria...
Quelle occupate dal sistema non te le fa aprire, apri le altre...chiudile di botto....e quindi? l'unico problema che puoi avere e che un programma collegato a quelle porte ti dice che il socket ha chiuso la comunicazione...

Scusa ma se io sono un server e stò in attesa di client...a questo punto se ne connettono 100, attraverso 100 porte diverse (giusto per dire). poi chiudo il server, i client riceveranno il messaggio che il socket è stato chiuso (dalle relative funzioni di lettura e scrittura sul socket). dove stà il problema? Mi sembra un comportamento normale....O chiudi il server di botto o stacchi il acvo di rete, tutto questo grave problema non lo vedo
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 15:19   #17
gepeppe
Senior Member
 
L'Avatar di gepeppe
 
Iscritto dal: Jun 2005
Città: Napoli
Messaggi: 2599
Quote:
Originariamente inviato da 71104 Guarda i messaggi
non è stato "introdotto" nulla di simile: il sistema di sicurezza al 90% c'era già ed era già molto più flessibile di quello di Linux; ciò che è stato introdotto sono nuove features come le etichette di integrità e l'ormai arcinoto UAC.

non è detto: le operazioni che richiedono permessi elevati potrebbero venir negate direttamente e senza la presentazione di alcun messaggio di conferma all'utente. tale comportamento dipende da come è scritto il manifest dell'applicazione, sempre che ne abbia uno visto che c'è ancora gente che programma col MinGW in Dev-C++

anzi: su Windows l'unico utente che di default ha il permesso di logon è SYSTEM.
e come mai allora progammi tipo cclener oppure reg qualcosa riescono a modificare il registro di windows??

Se è come dici, certi programmi non potrebbero venire eseguiti..ma ci sono moltissime guide della serie "come ripulire il registro di windows"....se fosse un'operazione di super-utente questo non sarebbe possibile...eppure lo era

Se il registro viene compromesso windows e i programmi diventano inutilizzabili....no?
__________________
Hp pavilion dv6-1250el [cpu: P8700 - ati radeon hd 4650 1 gb - 4 gb ram - hd 320 7200 rpm!] Garmin Official Thread
gepeppe è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 15:32   #18
eVuGEGA
Member
 
L'Avatar di eVuGEGA
 
Iscritto dal: Apr 2008
Messaggi: 181
Quote:
Originariamente inviato da 71104 Guarda i messaggi
cheeee????
guarda, pure da Windows XP (lasciando perdere account amministrativi vs. LUA e menate varie), apri esplora risorse e dimmi se riesci a cancellare ntoskrnl.exe

se hai paura di riuscirci (lol ) fallo su una macchina virtuale.
Quote:
Originariamente inviato da gepeppe Guarda i messaggi
beh...essendo il file in esecuzione non lo cancella..
In realta' ntoskrnl.exe non viene cancellato perche' e' protetto dal Windows File Protection (che puo essere disabilitato abbasanza facilmente se si e' loggati come amministratore), non perche' e' in uso
Questo almeno fino ad XP, Vista non so

Ultima modifica di eVuGEGA : 22-06-2008 alle 15:35.
eVuGEGA è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 16:00   #19
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
gepeppe, lascia perdere: Windows ha sistemi di sicurezza notevoli già a partire da NT. E t'ho detto tutto.

Continuate la discussione sui socket, che è meglio.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro
@LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro
Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 22-06-2008, 23:00   #20
MD.TPTM
Member
 
Iscritto dal: Dec 2003
Città: Napoli
Messaggi: 142
Rassicuro 71104 che il socket TCP "fantasma" che rimane aperto dopo un'interruzione improvvisa di un processo che aveva effettuato una bind viene chiuso dal kernel poco dopo. Mi sembra strano che Fede_Reghe debba aspettare anche 10 minuti, a me spesso capita che sia riutilizzabile sin da subito, o in caso di bind error al massimo aspetto 60 secondi. In ogni caso per evitare l'errore si può utilizzare l'opzione del socket "SO_REUSEADDR".
__________________
Ho concluso trattative positivamente con: Sirio, SchumyFast, ST3P, maupap, chrisp, BloodFlowers, Polvere, creature.
MD.TPTM è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tra audio e AI: la ricetta di Qualcomm per l'agentic AI Tra audio e AI: la ricetta di Qualcomm per l'age...
Qualcomm annuncia la nuova generazione di SoC Snapdragon 8 Elite Gen 6 Qualcomm annuncia la nuova generazione di SoC Sn...
realme 16 Pro Harry Potter Edition: il nuovo midrange ha uno stemma di Hogwarts che cambia colore al sole! realme 16 Pro Harry Potter Edition: il nuovo mid...
Recensione REDMI Note 17 Pro: il midrange con batteria da 8.340 mAh e ricarica veloce Recensione REDMI Note 17 Pro: il midrange con ba...
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Ninja MAX, la friggitrice ad aria da 6,2...
Poche scorte rimaste: Mini PC con Ryzen ...
Adobe Premiere è disponibile anche su An...
Sorpresa su Amazon: ora sono 2 le e-bike...
Galaxy S27, svelate le configurazioni di...
Gli studenti americani voltano le spalle...
Mercedes-Benz e Wayve si uniscono: guida...
Meta Muse Charm: sembra un Tamagotchi, m...
Ray-Ban Meta Audio: occhiali smart senza...
Meta VR Glasses: Meta porta la realt&agr...
Meta Ray-Ban Display, gli occhiali diven...
Agente AI di OpenAI oltre i limiti: acce...
Xiaomi 18 Pro e 18 Pro Max, i nuovi flag...
ESA e Mistral hanno stretto un accordo p...
AstroForge presenta Autonomy-1: un satel...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 08:11.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v