Так, с 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, как все заработало.
Парсер /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, как все заработало.