2014-01-30 7 views
2

У меня есть HANDLE подобное:Преобразование Дескриптор файла дескриптора

HANDLE hPipe = CreateNamedPipe(...) 

можно преобразовать hPipe в File Descriptor (INT)?

Мне нужно это, потому что я реализовал в C++ код для работы с TLS с использованием OpenSSL. Это работает как шарм с сокетами TCP, но мне действительно нужно использовать его над Namedpipe.

Функция OpenSSL, SSL_set_fd(SSL *ssl, int fd) принимает только FileDescriptor что является INT, а не HANDLE.

Примечание: Я также попытался пользоваться приведенной ниже функции, но не работал (возвращение 3):

int fd = _open_osfhandle(reinterpret_cast<intptr_t>(hPipe), 0);  
+0

Вы сначала назвали 'ConnectNamedPipe'? Возможно, не удастся создать файловый дескриптор для несвязанного канала. –

+0

Да, я сначала вызвал «ConnectNamedPipe (hPipe, NULL)», а затем «_open_osfhandle (...)». – user2538743

+0

Чтобы быть более конкретным, я использую пример Microsoft [Сервер многопоточных труб] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa365588%28v=vs.85%29.aspx), и я вызываю «_open_osfhandle (...)» в одной строке над первым «ReadFile (..)». – user2538743

ответ

2

3 вы получаете обратно не ошибка, это дескриптор файла ручка. Если вы посмотрите на the documentation, вы увидите, что он возвращает -1 для отказа, в противном случае возвращаемое значение является файловым дескриптором.

+0

Да, странное поведение на OpenSSL? – user2538743

+0

Какое странное поведение? Ваш вопрос спрашивает, как получить дескриптор файла из РУЧКИ? – Sean

+0

Когда я использую дескриптор файла, возвращенный из «_open_osfhandle()» в OpenSSL, «SSL_accept()« возвращает «-1» и сообщает об ошибке «SSL_ERROR_SYSCALL», поэтому возникает проблема с «Файловым дескриптором», – user2538743

Смежные вопросы