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