www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Can't get nonblocking socket.

reply Dawid =?ISO-8859-2?Q?Ci=EA=BFarkiewicz?= <arael fov.pl> writes:
Error: Unable to set socket blocking.

I was googlin' for that but I can't find what am I doing wrong. Maybe
someone can give me some advise.

I've found this only:
http://www.digitalmars.com/d/archives/digitalmars/D/2658.html

I've got glibc 2.3.4 - can be this similar problem?

Regards,
-- 
Dawid Ciężarkiewicz | arael
jid: arael fov.pl
Feb 08 2005
parent "Regan Heath" <regan netwin.co.nz> writes:
On Tue, 08 Feb 2005 16:10:46 +0100, Dawid Ciężarkiewicz <arael fov.pl>  
wrote:
 Error: Unable to set socket blocking.

 I was googlin' for that but I can't find what am I doing wrong. Maybe
 someone can give me some advise.

 I've found this only:
 http://www.digitalmars.com/d/archives/digitalmars/D/2658.html

 I've got glibc 2.3.4 - can be this similar problem?
It does look like the same problem. I looked in std.socket and I see: # void blocking(bit byes) # { # version(Win32) # { # uint num = !byes; # if(SOCKET_ERROR == ioctlsocket(sock, FIONBIO, &num)) # goto err; # _blocking = byes; # } # else version(BsdSockets) # { # int x = fcntl(handle, F_GETFL, 0); # if(byes) # x &= ~O_NONBLOCK; # else # x |= O_NONBLOCK; # if(SOCKET_ERROR == fcntl(sock, F_SETFL, x)) # goto err; # } # return; //success # # err: # throw new SocketException("Unable to set socket blocking."); # } which is the error you're getting. I notice it's using fcntl to set the blocking state of the socket. On error it sets errno, so retrieving errno and/or the error message associated might tell us more. To do so call strerror(errno). See the attached file for an example. Ideally add this error string to the exception throw. You'd have to change std.socket and rebuild phobos. I have some code here which uses the 'ioctl' function instead of fcntl, eg. int nonblock = 1; ioctl(sock,FIONBIO,nonblock); so you/we could also try that. You'd have to change std.socket and rebuild phobos. Regan
Feb 08 2005