LINUX.ORG.RU

Client-Server


0

0

Я чайник в сетевом программировании и у меня возникла проблема при написании примитивного клиент-сервеного приложения.

Делаю все по стандартным примерам, которые можно найти в любом tutorial по сокетам. Отлаживаю на локальной машине. Запускаю сервер, он создает сокет, делает bind на нужный порт (скажем, 3210), слушает (listen). Запускаю клиента, он создает сокет и соединяется с сервером (connect). Сервер делает accept и по полученному дескриптору ждет сообщение (recv). Клиент отправляет посылку (send), сервер ее получает и отправляет ответ, который клиент тоже получает удовлетворительно. После этого оба закрывают все дескрипторы и сервер завершает выполнение (мне так нужно), а клиент продолжает выполнение.

Так вот, если теперь опять попробовать запустить сервер, то он отвалится с такой ошибкой: "Can't bind to port 3210: Address already in use" (первая часть сообщение моя, вторая из strerror(errno)). Все приходит в норму после перезапуска клиента. Почему это происходит? Все дескрипторы ведь были закрыты с обеих сторон. Может быть я как-то некорректно завершаю соединение?

anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.