Можно ли открыть существующий локальный сокет, (имеется в виду семейство PF_LOCAL)? Пробовал: fd=open("/home/user/sockets/sock", O_RDWR); получаю fd=-1, errno: Operation not supported. понятно, что можно каждый раз: sock=socket(PF_LOCAL, SOCK_STREAM, 0); unlink("/home/user/sockets/sock"); strcpy(sname.sun_path, "/home/user/sockets/sock"); bind(sock, &sname, ...); listen(...); именно bind создает файл /home/user/sockets/sock, но после close(sock) и после завершения процесса файл не удаляется. /home/user/sockets/sock - особый файл, с пометкой, что это сокетный файл. open на него не действует ... можно ли как-либо определить потом что это было TCP или UDP?
Для FIFO, например, есть mkfifo, которая делает особый FIFO-файл в файловой системе. Потом этот файл можно открыть open, читать, писать read и write из двух разных процессов. А вот для сокетов пока не нашел подобного вызова для создания (только bind)... И открыть его не получается с помощью open... Такой псевдо-файл остается в файловой системе и после работы проги. Кто нибудь что-то знает про открытие существующего локального сокета?
а обязательно ли открывать локальный сокет?насколько я понял, локальный сокет - это сокет,не выходящий в физическую линию.так нельзя ли поставить сокет на прослушку по айпи 127.0.0.1?
да, и кстати говоря, когда создаёш сокет , указываеш, какого он типа - TCP или UDP(значения SOCK_STREAM и SOCK_DGRAM соответственно)
Локальные сокеты это не inet-сокеты. Они служат для взаимодействия процессов на одной системе. До меня дошло вот что. На сокет надо делать сначала connect()! Что вполне логично. Но если локальный сокет уже живет на файловой системе, и на нем никто не listen(), то connect(), естественно вернет errno: Connect refused. (Проверено). Другой процесс (сервер) сначала должен сделать unlink, потом bind, listen и далее в цикле accept. вот только между unlink и bind другой процесс может попытаться bind. proc1: unlink proc2: bind proc1: bind -- errno: bind failed adderess already in use proc2: listen .... и всеже хорошо бы отрыть на listen() уже имеющийся локальный сокет в процессе-сервере!