[Python] Socket windows

Manlio Perillo manlio.perillo a gmail.com
Lun 26 Maggio 2014 14:30:27 CEST


2014-05-26 12:57 GMT+02:00 Enrico Bianchi <enrico.bianchi a ymail.com>:

> Ultimamente mi sto scontrando cone le idiosincrasie di Windows senza
> trovare una via di uscita. Prendiamo in esame il seguente codice:
>
> > [...]

>
> Il codice non e` altri che un normale echo server, che apre il suo socket
> e si mette in ascolto delle richieste dei client. Il problema e` che che su
> ambienti *nix (o meglio, su Linux, visto che non ho altri sistemi *nix su
> cui provare ;) ) non solo funziona bene, ma basta un CTRL + C (SIGINT) per
> terminare il processo ed avere di nuovo la shell libera. Su Windows pero` a
> quanto pare non funziona,


Il problema è che su Windows i segnali sono implementati in modo
completamente diverso.  In particolare non sono gestiti dal kernel (che ha
il controllo su come/quando gira un processo in user space).

Su un sistema UNIX quando premi Ctrl-C, la shell invia il segnale SIGING al
programma in foreground.  Tale segnale viene gestito dal kernel, che
sospende l'esecuzione del programma ed esegue il signal handler, se
presente.

Riguardo Windows, leggi la nota riguardo SIGINT su
http://msdn.microsoft.com/en-us/library/xdkz3x12.aspx

ovvero l'unico modo per fermare il processo e` killandolo brutalmente, cosa
> non sempre fattibile (e.g. se faccio girare l'echo server come servizio non
> posso fermarlo dalla schermata dei servizi). C'e` un modo per aggirare
> questa cosa che non sia "abbandona Windows"? :)
>
>
Si, ed è quello di replicare quello che succede su un sistema UNIX.
Questo significa eseguire un thread separato che si occupa di intercettare
degli "eventi" speciali, come la pressione dei tasti Ctrl + C, e terminare
l'applicazione.  Ma non ho idea se la cosa funzioni, ne dei vari dettagli.

Da una veloce ricerca è uscito fuori questo:
http://stanislavs.org/stopping-command-line-applications-programatically-with-ctrl-c-events-from-net/


Ciao  Manlio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20140526/cae624d0/attachment.html>


Maggiori informazioni sulla lista Python