I want to port my code from linux to windows. It is something like this:
void SetNonBlocking( int filehandle )
{
int fhFlags;
fhFlags = fcntl(filehandle,F_GETFL);
if (fhFlags < 0)
{
perror("fcntl(F_GETFL)");
exit(1);
}
fhFlags |= O_NONBLOCK;
if (fcntl(filehandle,F_SETFL,fhFlags) < 0)
{
perror("fcntl(F_SETFL)");
exit(1);
}
return;
}
Now I want have same in windows. Any ideas? Actualy my filehandle is read side of pipe which is created via WinApi CreatePipe
method.
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.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.
Like this:
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.