Есть сервак, который создает сокет:
int sock = socket(PF_INET, SOCK_STREAM, 0);
bind(sock, server_addr, sizeof(*server_addr));
listen(sock, 100);
int client = accept(sock, 0, 0);
далее он принимает от клиента один int и посылает клиенту два int
recv(client, &req, sizeof(req), 0);
send(client, &rep, sizeof(rep), 0);
send(client, &rep, sizeof(rep), 0);
Клиент подключается к серверу как:
int srv = socket(PF_INET, SOCK_STREAM, 0);
connect(srv, ......);
если теперь клиент выполнит такую последовательность:
recv(srv, &req, sizeof(req), 0);
send(srv, &rep, sizeof(rep), 0);
send(srv, &rep, sizeof(rep), 0);
close(srv);
то все будет ок, а если такую:
recv(client, &req, sizeof(req), 0);
close(srv);
то серверная часть вылетит на втором вызове send! Причем просто вылетит приложение перестает работать и возвращается в командную строку! Отмечу что сервер работает в отдельном потоке (pthread).
Собственно вопрос: Чего сделать чтобы сервак не вылетал?