С небольшой тестовой программой (скомпилированной с mingw в Linux) я заметил, что нельзя использовать вызовы read
и write
на сокете fd, полученные с использованием реализации вызова socket
Winsock2. Вызов записи возвращает < 0 и устанавливает errno = EBADF.
Подумайте о программах, запущенных из xinetd, за вычетом их предположения, что их stdin/stdout всегда является сокетом. (Некоторые программы действительно вызывают getpeername, например, что не удастся, если оно не является сокетом, а затем они могут выйти преждевременно.)
Итак, как {{описатель типа}} -значительные программы, которые только что читают/записывают из/в stdin/stdout, которые должны разумно работать в среде win32, если не делать предположений о fd?
Или, проще говоря, есть какой-нибудь вызов магической функции, который должен быть выполнен для подключения к Winsock2 socket fds с реализацией win32 (ну, mingw) write
?