int udp_nb_bind(int ls, u_short port) { SOCK_ADDR listener; int arg; memset(&listener, 0, sizeof(listener)); listener.sin_family = AF_INET; listener.sin_port = htons(port); listener.sin_addr.s_addr = INADDR_ANY; #ifdef macintosh if (socket_bind(ls, (struct sockaddr *)&listener, sizeof(listener)) < 0) #else /* !macintosh */ if (bind(ls, (struct sockaddr *)&listener, sizeof(listener)) < 0) #endif /* macintosh */ return -1; #ifdef WIN32 arg = 1; if (ioctlsocket(ls, FIONBIO, &arg) < 0) #elif defined(macintosh) arg = socket_fcntl(ls, F_GETFL, 0); arg |= O_NONBLOCK; if (socket_fcntl(ls, F_SETFL, arg)) #else arg = FNDELAY; if (fcntl(ls, F_SETFL, arg) == -1) #endif return -1; return 0; }
virtual int SetNonBlocking() { int err; #ifdef LOGOG_FLAVOR_POSIX int flags; flags = socket_fcntl( m_Socket, F_GETFL, 0 ); flags |= O_NONBLOCK; err = socket_fcntl( m_Socket, F_SETFL, flags ); #endif #ifdef LOGOG_FLAVOR_WINDOWS unsigned long parg; parg = 1; err = ioctlsocket( m_Socket, FIONBIO, &parg ); #endif return err; }