ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
2 мая
1425942 Топик полностью
RxTx (12.04.2024 22:43 - 22:50, просмотров: 116) ответил Dingo на Опять та же ситуация: про всё это читал, попадалось, но с какими опциями что вызывать - даже примерно не представляю.
Всё должно быть ясно по смыслу. Давай закрепим: 

socket() просто создаст пустую структуру сокета

bind() связка структуры сокета с адресом:портом или именем файла. Для UDP-сокетов уже сразу откроет порт

для локальных "UNIX"-сокетов мэпящихся на пайп, файл ситуация определяется часто только локально и сокет будет работать только в одну сторону.

Чтобы обеспечить двухстороннюю фулдуплесную работу необходимо два сокета. За подробностями и примерами кода идем в «Beej's Guide to Interprocess Communication»

https://beej.us/guide/bgipc/html/split/unixsock.html#unixsock


// для UDP или для "локальных", они же "UNIX" сокетов двух вызовов socket(), bind() будет достаточно для работы.


conect() - только для TCP-клиентов, производит коннект на удаленный адрес

listen() - только для TCP-серверов, создает слушающий сокет (например порт 80 у TCP-сервера)

accept() - только для TCP-серверов, из очереди соединений (коннектов клиентов на предыдущий сокет созданный listen()) создаст и вернет новый сокет TCP клиент-сервер соединения


send()

recv() - с этим всё понятно, учитывать что recv() может принять 0 байтов, это не ошибка


shutdown() - грубо рубануть сокет, вторая сторона узнает в случае TCP об этом только по таймауту

close() - нормально закрыть соединение с обменом пакетами.