LINUX.ORG.RU

send вместо write на tty девайс

 ,


0

1

Здравствуйте.

Есть сетевая библиотека fossa. Она, грубо говоря, предоставляет приятный интерфейс к системному вызову select с плюшками в виде http и много чего еще.

В этой библиотеке есть функция ns_add_sock, которая добавляет дескриптор сокета в select.

И есть функция ns_send, которая, в конечном счете делает send на нужный сокет.

На гитхабе меня уверили, что fossa заработает и с tty. Я открыл tty девайс, передал его дескриптор в ns_add_sock, сделал ns_send. В результате, в пойманном событии NS_SEND узнал, что отправлено -1 байт. Последняя ошибка: «Socket operation on non-socket»

И это при том, что в манах по send написано: The only difference between send() and write(2) is the presence of flags. With a zero flags argument, send() is equivalent to write(2)

И вот в этом месте я в замешательстве. Должна ли работать send на tty-девайсе? В чем еще может быть причина «Socket operation on non-socket»?

★★★★★

write работает на сокетах, наоборот не уверен

anonymous ()

Я открыл tty девайс, передал его дескриптор в ns_add_sock

сокет после этого в соединенном состоянии?

registrant ★★★★★ ()
Ответ на: комментарий от registrant

Я сделал open(«/dev/ttyUSB0»), open успешно открыл девайс. В соединенном ли состоянии после этого «сокет» - я не знаю )

makoven ★★★★★ ()
Ответ на: комментарий от makoven

getsockopt на таком дескрипторе возвращает ENOTSOCK. юзай write

registrant ★★★★★ ()

send() не обязана работать на не-сокетах, и в некоторых ОС не работает (по-моему, на FreeBSD так).

Sorcerer ★★★★★ ()

Как вариант: socat запустить, который будет слушать порт и писать в устройство.

Tayler ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.