X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=octopi%2Flibrary%2Fsockets%2Fraw_socket.cpp;h=6fb3d6eaabc520670acaf673f006b8e37e40eea6;hb=refs%2Fheads%2Frelease-2.140.135;hp=b3a52196f9b8dc18a7c9b5978e694e3d6c955db8;hpb=51d71c226be424b6a698c7474d237e8c69661af5;p=feisty_meow.git diff --git a/octopi/library/sockets/raw_socket.cpp b/octopi/library/sockets/raw_socket.cpp index b3a52196..6fb3d6ea 100644 --- a/octopi/library/sockets/raw_socket.cpp +++ b/octopi/library/sockets/raw_socket.cpp @@ -126,7 +126,11 @@ int raw_socket::ioctl(basis::un_int socket, int request, void *argp) const return ::ioctl(socket, request, argp); #endif #ifdef __WIN32__ - return ioctlsocket(socket, request, (un_long *)argp); + #ifdef _MSC_VER + return ioctlsocket(socket, request, (un_long *)argp); + #else + return ioctlsocket(socket, request, (un_int *)argp); + #endif #endif } @@ -210,25 +214,31 @@ int raw_socket::inner_select(basis::un_int socket, int mode, int timeout, fd_set_wrapper &read_list, fd_set_wrapper &write_list, fd_set_wrapper &exceptions) const { -#ifdef DEBUG_RAW_SOCKET FUNCDEF("inner_select"); -#endif // setup the file descriptor sets for the select. we check readability, // writability and exception status. FD_ZERO(&read_list); FD_SET(socket, &read_list); FD_ZERO(&write_list); FD_SET(socket, &write_list); FD_ZERO(&exceptions); FD_SET(socket, &exceptions); - timeval time_out = time_stamp::fill_timeval_ms(timeout); + timeval base_time_out; + time_stamp::fill_timeval_ms(base_time_out, timeout); // timeval has tv_sec=seconds, tv_usec=microseconds. +#if !defined(__GNU_WINDOWS__) + timeval *time_out = &base_time_out; +#elif defined(__GNU_WINDOWS__) + __ms_timeval win_time_out; + win_time_out.tv_sec = base_time_out.tv_sec; + win_time_out.tv_usec = base_time_out.tv_usec; + __ms_timeval *time_out = &win_time_out; +#endif // select will tell us about the socket. int ret = ::select(socket + 1, - (mode & SELECTING_JUST_WRITE)? NIL : &read_list, - (mode & SELECTING_JUST_READ)? NIL : &write_list, - &exceptions, &time_out); + (mode & SELECTING_JUST_WRITE)? NULL_POINTER : &read_list, + (mode & SELECTING_JUST_READ)? NULL_POINTER : &write_list, + &exceptions, time_out); int error = critical_events::system_error(); - if (!ret) return 0; // nothing to report. if (ret == SOCKET_ERROR) { @@ -391,14 +401,23 @@ int raw_socket::select(int_array &read_sox, int_array &write_sox, FD_SET(sock, &write_list); } - timeval time_out = time_stamp::fill_timeval_ms(timeout); + timeval base_time_out; + time_stamp::fill_timeval_ms(base_time_out, timeout); // timeval has tv_sec=seconds, tv_usec=microseconds. +#if !defined(__GNU_WINDOWS__) + timeval *time_out = &base_time_out; +#elif defined(__GNU_WINDOWS__) + __ms_timeval win_time_out; + win_time_out.tv_sec = base_time_out.tv_sec; + win_time_out.tv_usec = base_time_out.tv_usec; + __ms_timeval *time_out = &win_time_out; +#endif // select will tell us about the socket. int ret = ::select(highest + 1, - (read_sox.length())? &read_list : NIL, - (write_sox.length())? &write_list : NIL, - &exceptions, &time_out); + (read_sox.length())? &read_list : NULL_POINTER, + (write_sox.length())? &write_list : NULL_POINTER, + &exceptions, time_out); int error = critical_events::system_error(); if (ret == SOCKET_ERROR) {