Is there way to make file descriptor non blocking in windows?

后端 未结 3 556
温柔的废话
温柔的废话 2021-01-14 01:05

I want to port my code from linux to windows. It is something like this:

void SetNonBlocking( int filehandle )
{
    int fhFlags;

    fhFlags = fcntl(fileha         


        
相关标签:
3条回答
  • 2021-01-14 01:21

    Like this:

    ulong arg = 1;
    ioctlsocket(sock, FIONBIO, &arg);
    

    FIONBIO sets the socket in non-blocking mode. Though you should also use OVERLAPPED io as Will suggests. But overlapping and non-blocking is not the same thing.

    0 讨论(0)
  • 2021-01-14 01:38

    The Windows API function CreateNamedPipe has an option to make the handle non-blocking. (See MSDN). Also see the MSDN article on Synchronous and Overlapped I/O. BTW, you can directly compile POSIX compliant code on Windows using MinGW or Cygwin and thus avoid the headache of porting.

    0 讨论(0)
  • 2021-01-14 01:40

    The term for non-blocking / asynchronous I/O in Windows is 'overlapped' - that's what you should be looking at.

    Basically, you identify a file handle as using overlapped i/o when you open it, and then pass an OVERLAPPED structure into all the read and write calls. The OVERLAPPED structure contains an event handle which can be signalled when the I/O completes.

    0 讨论(0)
提交回复
热议问题