Доброго всем!
Для нужд тестирования tcp-клиента делаю простой сервер, от которого (пока) нужно только принять сообщение и подтвердить его прием.
Клиент (псевдокод):
cli_sd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(cli_sd, SOL_SOCKET, SO_RCVTIME0, ...);
setsockopt(cli_sd, SOL_SOCKET, SO_SNDTIME0, ...);
connect(cli_sd, ...);
while (1) {
send(...);
recv(...);
}
Сервер (тоже псевдокод):
srv_sd = socket(AF_INET, SOCK_STREAM, 0);
setsockopt(srv_sd, SOL_SOCKET, SO_REUSEADDR, ...);
bind(...);
while (1) {
cli_sd = accept(...);
setsockopt(..., SO_RCVTIME0, ...);
setsockopt(..., SO_SNDTIME0, ...);
int rd = recv(...);
if (errno == ECONNRESET) {
shutdown(cli_sd, ...);
close(cli_sd, ...);
continue;
}
send(...);
}
Обмен есть, сообщения посылаются/отправляются, а вот когда я прерываю работу клиента (чтобы сымитировать разрыв соединения) accept
как ни в чем не бывало, тут же соединяется, cli_sd
получает то же значение, что и было, но ведь клиент уже не работает.
Поскольку это первое серьезное приложение с сокетами, помогите разобраться, как переподсоединить клиента.