После двух дней попыток создать клиентский сокет, который подключается к серверу, я хотел бы попросить вас о помощи.C socket reconnect
I.E. Я запускаю сервер и клиент. Чем я убью сервер и хочу, чтобы этот клиент попытался снова подключиться, пока я снова не запустил сервер.
У меня есть функция socketcreate
, которая возвращает socket_fd
, которую я использую для первого подключения (и это работает).
Но когда сервер умирает, и я закрываю предыдущий socket_fd
и я стараюсь reconnect
с помощью socketcreate
я получил ошибку Bad file descriptor
.
Но почему? Я закрыл предыдущий socket_fd
, и я снова запускаю функцию, чтобы начать новое соединение.
....
while(1) {
send(sock_fd, buf, strlen(buf),0);
if((numbytes = recv(sock_fd, buf, strlen(buf),0) == 0){
close(sock_fd);
sock_fd = createsocket();
}
- это нормально, чтобы признать потерянное соединение (я читал, что да). Или SIGPIPE лучше распознать потерянное соединение во время отправки()?
- Как насчет повторного подключения во время (1)?
Сообщите нам, пожалуйста, свой код. –
Если вы используете файл сокета unix, удалите/удалите этот файл до запуска сервера (* или удалите перед связыванием на сервере *), если net-socket затем SO_REUSEADDR –
@GrijeshChauhan: ' SO_REUSEADDR' означает повторное использование адреса (например, 192.168.0.1:12345), а не повторное использование уже закрытого сокета 'close()' ed. – alk