Часть работы с клиентом: Code: int socket_handler, bytes_read, buf_size = 1024; char buf[buf_size]; while(true) { int socket_handler; if((socket_handler = accept(socket_listener, 0, 0)) == -1) { perror("accept()"); exit(1); } int bytes_read, buf_size = 1024; char buf[buf_size]; while(true) { bytes_read = 0; memset(buf, 0, buf_size); bytes_read = recv(socket_handler, buf, buf_size, 0); cout << "buf: " << buf << "bytes_read: '" << bytes_read << "'" << endl; if(bytes_read <= 0) break; send(socket_handler, buf, bytes_read, 0); } close(socket_handler); } Если подрубаюсь через netcat, шлю текст, приходит эхо, далее ctrl + c / ctrl + d (EOF / конец файла) и закрывается соединение на обоих сторонах, если же жму ctrl + z (остановка программы), то закрывается соединение на стороне клиента, а на стороне сервера провисает - как предусмотреть подобную ситуацию, чтобы сервер закрывал соединение? По ходу я с командами (ctrl + ...) напутал...
Тут дело в netcat'е (с telnet'ом то все ок), после ctrl+d он больше не реагирует на ввод, но сокет держит - о чем свидетельствует netstat. Не знаю, что ты хочешь, но можешь сделать таймаут при помощи select.