Categories:

Так, с UNIX-сокетами разобрались, теперь INET…

А началось все с того, что я просто захотел в свою библиотеку сниппетов добавить функции открытия сокета и выдачи файлового дескриптора (пока такой функции нет, сразу запускается поток или клиента, или сервера, обслуживающий кольцевой буфер приема и попутно запускающий обработчики данных, если указаны).
Парсер /proc/net/unix работает и выдает правильный тип сокета. А вот с сетевыми просто жопа какая-то: если сокет не SOCK_STREAM, то никаких способов узнать, что это, нет! Даже просто слушающий сокет на локалхосте не отображается нигде, пока к нему кто-нибудь не подсоединится.
Стал тестировать с netcat. И обнаружил интересную вещь! Если я запускаю сервер на netcat, то вот такие варианты (ishtar - имя моего компьютера) работают (в смысле - я могу подсоединиться к этим сокетам из своего приложения): nc -l 12341, nc -l ishtar 12341, nc -l -p 12341 и даже nc -l 127.0.0.1 12341. Но стоит мне написать nc -l localhost 12341, как все "ломается": «Connection refused».
Ну и да, похоже, все-таки придется смириться с тем, что присоединиться я смогу лишь к сокетам SOCK_STREAM, а если вдруг сокет будет, скажем, SOCK_SEQPACKET, то всë, приплыли…
UPD: "болван" подсказал, что это может быть из-за IPv6. И действительно: только сменил AF_INET на AF_UNSPEC, как все заработало.
promo eddy_em 二月 18, 09:43 4
Buy for 10 tokens
По-отдельности все четыре в своей "мультиплате" проверил. Т.к. использовал преобразователь 485+232 на CH340, быстрей 2Мбод проверить не вышло, нужно на pl2303 искать, или, что проще — два интерфейса между собой соединить. А мне вчера дипсик как раз почти и сказал, что ошибка у меня в ДНК, когда я…