On 04/20/2011 03:46 PM, Bastien ROUCARIES wrote:
> On Wed, Apr 20, 2011 at 7:17 PM, Bastien ROUCARIES
> <[email protected]> wrote:
>>> Is the gnulib select() only intended to be used with nonblocking sockets on
>>> windows?
>>
>> I have just tested the program at the end of the file, it thread is
>> blocked when enable =0 (block socket) and enable=1 it fail with
>> WSAEWOULDBLOCK
>>
>> So i possible stragegy will be:
>> 1. createathread TID from parent
>> 2. in TID do WSAIoctl(sock, SIO_ADDRESS_LIST_CHANGE,NULL, 0, NULL,
>> 0,&bytes,NULL,NULL);
>> 3. in  parent: if TID returned with WSAEWOULDBLOCK tag socket non blocking
>> 4. query running state of TID, if suspended socket is blocking, kill
>> thread and mark socket blocking
> 
> It will not work using a thread (thread are not cancelable under
> windows), but using a new process with inherited socket it will work
> slow but a little bit as the projected openat function using fork

Spawning a process just to learn if a socket is blocking?  Wow.

Sounds like caching the information independently (like we already do
for dirfd) is the way to go then, so that we only have to spawn when
inheriting sockets through stdin/out/err.

-- 
Eric Blake   [email protected]    +1-801-349-2682
Libvirt virtualization library http://libvirt.org

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to