s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) while 1: conn, addr = s.accept() print 'Connected by', addr while 1: data = conn.recv(8) <<<<<<<<<<<<<< if not data: break print data sss=c_char_p(data) print sss.value
После закрытия клиента процесс завершается на выделенной строке с сообщением socket.error: An existing connection was forcibly closed by the remote host
вместо того, чтобы открывать новое соединение.
Код клиента:
void main () { WSADATA wsaData; WSAStartup (0x101, &wsaData); SOCKET ConnSock = socket (AF_INET,SOCK_STREAM,0); SOCKADDR_IN si = {0}; si.sin_family = AF_INET; si.sin_addr.s_addr = inet_addr( "127.0.0.1" );; si.sin_port = htons(50007); connect(ConnSock, (SOCKADDR*) &si, sizeof(si) ); WSAGetLastError(); for (unsigned i=0; i<2; i++) { char str[] = "Quick brown fox jumps over the lazy dog."; send( ConnSock, str, sizeof(str), 0 ); } }
Если добавить в клиент closesocket, то работает нормально. Но хотелось бы обрабатывать вариант с аварийным закрытием. Как это сделать?