Это часть кода сервера. Когда клиент выходит, программа сервера умирает без coring после следующей строки:
n = send(s, buf+total, bytesleft, 0);
Вот функция:
static ssize_t conn_Send(int s, u8* buf, ssize_t len)
{
ssize_t total = 0; // how many bytes we've sent
ssize_t bytesleft = len; // how many we have left to send
ssize_t n;
while(total < len)
{
n = send(s, buf+total, bytesleft, 0);
//abort();
if (n < 0)
{
return n;
}
total += n;
bytesleft -= n;
}
return total;
}
Я посмотрел в очевидные места: /proc/sys/kernel/core_pattern настроен правильно, и действительно, программа завершает работу с основным файлом, если "//abort();" прокомментирован выше.
Есть идеи? Я нахожусь в конце.
Когда клиент выходит, программа сервера умирает
n = send(s, buf+total, bytesleft, 0);
Обычно это результат того, что SIGPIPE
убит, когда другой конец закрывает соединение. Существует немало способов обойти это, в том числе:
setsockopt
с SO_NOSIGPIPE
MSG_NOSIGNAL
в качестве флага send
SIGPIPE
$?
,