2013-04-10 2 views
1

После двух дней попыток создать клиентский сокет, который подключается к серверу, я хотел бы попросить вас о помощи.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(); 

} 
  1. это нормально, чтобы признать потерянное соединение (я читал, что да). Или SIGPIPE лучше распознать потерянное соединение во время отправки()?
  2. Как насчет повторного подключения во время (1)?
+3

Сообщите нам, пожалуйста, свой код. –

+1

Если вы используете файл сокета unix, удалите/удалите этот файл до запуска сервера (* или удалите перед связыванием на сервере *), если net-socket затем SO_REUSEADDR –

+0

@GrijeshChauhan: ' SO_REUSEADDR' означает повторное использование адреса (например, 192.168.0.1:12345), а не повторное использование уже закрытого сокета 'close()' ed. – alk

ответ

2

После двух дней попыток создать клиентский сокет, который подключится к серверу

остановись. Невозможно повторно подключить сокет.