Portál AbcLinuxu, 12. května 2025 07:28
HOST = '' PORT = 6001 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen() print 'server ceka na pripojeni' while 1: conn, addr = s.accept() print pripojen klient:', addr while 1: data = conn.recv(1024) *prijmu data nejaka omacka co zpracuje dosla data conn.send(pomsend) *poslu dataa problem je nasledujici, pokud clovek s terminalem odejde mimo dosah signalu, tak se nekdy stane ze server zustane viset (asi na recv()) a jedina moznost je ten programek sestrelit, pockat az upadne spojeni co je ve stavu fin_wait a pak ho pustit znovu. Je nejaka moznost jak se tohoto chovani zbavit? + jak poznam kdy se client(wifi terminal) odpojil korektne?
struct timeval timeout; /* set receive timeout to 1s */ timeout.tv_sec = 1; timeout.tv_usec = 0; setsockopt(sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout)V pythonu budes muset pouzit
setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, timeout)
Ten posledni parametr timeout bude string reprezentujici Cckovsky struct timeval. Viz. http://docs.python.org/lib/socket-objects.html
Bohuzel nemam moznost to vyzkouset.
tv = struct.pack('ii', int(timeout), int((timeout-int(timeout))*1e6))
setsockopt(socket.SOL_SOCKET, socket.SO_RCVTIMEO, tv)
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.