К чему подключается функция connect()?

К чему подключается функция connect()?

30.03.2014 02:38:00 Просмотров 24 Источник

Начал читать книгу Стивенса Unix. Разработка сетевых приложений. Написал свои банальные сервер и клиент. Сервер создает сокет, и ждет пока к нему подключится клиент. Клиент после подключения пишет сообщение, а сервер его на экран выводит.

Но суть вот в чем: если не поднимать сервер, то клиент все равно подключается куда то и отсылает сообщение

сервер: http://pastebin.com/3WRWJaMT

клиент: http://pastebin.com/dmEcFeyH

Помогите разобраться, почему так происходит?

У вопроса есть решение - Посмотреть?

https://ru.stackoverflow.com/questions/308736/%d0%9a-%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8f-connect#comment308748_308736
bind можно (а иногда и нужно!) применять на клиенте. Сервер из сокета делает вызов accept. Код работает странно, потому что connect в случае ошибки возвращает -1, а Вы проверяете на неравенство нулю. Ноль теоретически может быть возвращен и это будет валидный ответ.
https://ru.stackoverflow.com/questions/308736/%d0%9a-%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8f-connect#comment308753_308736
mega, помогло KoVadim, по-моему, Вы что-то напутали, я ведь как раз и проверяю на ноль) то есть, если ноль, то посылать сообщение
https://ru.stackoverflow.com/questions/308736/%d0%9a-%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8f-connect#comment308759_308736
а как же все таки функция connect подключалась к чему то, если accept() нигде не вызывался.
https://ru.stackoverflow.com/questions/308736/%d0%9a-%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8f-connect#comment308761_308736
>а как же все таки функция connect подключалась к чему то, если accept() нигде не вызывался к самому себе, но это бред, это работать не должно )
https://ru.stackoverflow.com/questions/308736/%d0%9a-%d1%87%d0%b5%d0%bc%d1%83-%d0%bf%d0%be%d0%b4%d0%ba%d0%bb%d1%8e%d1%87%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d1%84%d1%83%d0%bd%d0%ba%d1%86%d0%b8%d1%8f-connect#comment308767_308736
а у вас подключается? у меня, к слову, и на виртуалке подключается и отсылает

Ответы - К чему подключается функция connect()? / К чему подключается функция connect()?

Является ответом!
avp

30.03.2014 06:14:39

@knoxx, действительно это происходит (connection established) поскольку Вы делаете bind() для клиентского сокета и connect() на тот же адрес!!!.

Попробуйте разнести клиент и сервер по разным машинам и эффект пропадет. Точнее, bind у клиента вернет ошибку (bind: Cannot assign requested address), но на последующий connect() она не повлияет.

Если указанный порт кто-то там слушает, то соединитесь, если нет, то получите ответ "Connection refused" (или "Connection timed out").

Закрыть X