9

LinuxサーバーをWindowsで実行しようとしています。

Linuxでは、ソケットとファイル記述子は同じように扱われます。一部のシステムAPIは、ソケット記述子とファイル記述子の両方で使用できます。

ただし、私はWinsockでソケットを扱い、WIN APIでHANDLE(ファイル記述子)を扱います。

したがって、整数がソケットまたはハンドルであることを知る必要があります。

今ここに質問があります:

socket()とopen()からの戻り値はWindowsで同じですか?

それらが常に異なる場合は、システムのものをラップするために独自のsocket()とopen()を作成できます。整数がソケットであるかHANDLEであるかにかかわらず、システムのAPIからの戻り値を記録します。

それらが同じであるならば、私はそれに対処する考えがありません。

4

2 に答える 2

16

ソケットハンドルはWin32(NTカーネル)ハンドルであるため、たとえば、ReadFileまたはWriteFileを使用できます。Winsockによって維持されるハンドルに関連付けられたユーザーモード状態もあります。そのため、CloseHandle()の代わりにclosesocket()を使用する必要があります。

open()は、Win32ハンドルとは異なるCRTファイル記述子を返します。_open_osfhandle()を使用してCRTファイル記述子を作成できます。ただし、ファイルをクリーンな方法で閉じることができないため、これはソケットには推奨されません。Winsockユーザーモード状態をリークするclose()を使用するか、CRT記述子をリークするclosesocket()を使用します。

于 2011-01-14T06:53:01.907 に答える
-1

socket()とopen()からの戻り値はWindowsで同じですか?

Windowsのソケットハンドルは、ファイルシステムの一部ではないWINSOCKサブシステムによって割り当てられます。

于 2011-01-13T05:17:00.480 に答える