У меня есть файловый дескриптор (0/stdin), для которого я хочу построить объект Socket в D. Как мне это сделать? Кажется, для этого нет подходящего конструктора.
Создание объекта сокета по файловому дескриптору
Ответы (1)
Есть конструктор с пометкой «использовать существующий дескриптор сокета», который принимает socket_t. Вы можете преобразовать int в socket_t (socket_t — это перечисление, основанное на int в системах Unix).
// it requires an address family but i don't think it matters much
auto socket = new Socket(cast(socket_t) 0, AddressFamily.INET);
Это позволит вам построить, хотя затем его использование приводит к ошибкам «Операция сокета на не-сокете», потому что сокет D вызывает send () и recv (), а не запись () и чтение (), поэтому я не уверен, как на самом деле сделать его полезным...
person
Adam D. Ruppe
schedule
26.10.2013
Ну, это работало хорошо для меня! Мое приложение запускается, поэтому стандартный входной поток фактически является сокетом. На самом деле не думал, что socket_t будет дескриптором файла.
- person Jeroen; 26.10.2013
А, конечно, прикольно. Кстати, если вы хотите пойти другим путем, есть метод Socket.handle(), который возвращает socket_t. В некоторых случаях он будет неявно приведен к типу int, но если нет, вы также можете явно привести его, а затем использовать для него обычные файловые функции unix.
- person Adam D. Ruppe; 26.10.2013