X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fsocket.c;h=efe87393108d5038e37869f0d354f87aedeb0a06;hb=99c14c9b8195e9b79e47ca6c059340afc01d2578;hp=4d4859edf3aa151ad23dea11e0072475870c1ee0;hpb=6874f61e24438ca6f4c54319ed52306bd5d349f9;p=deb_libnfs.git diff --git a/lib/socket.c b/lib/socket.c index 4d4859e..efe8739 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -14,6 +14,16 @@ You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ +#ifdef WIN32 +#include "win32_compat.h" +#else +#include +#include +#include +#include +#include +#include +#endif/*WIN32*/ #if defined(WIN32) #include @@ -43,6 +53,9 @@ #ifdef HAVE_SYS_FILIO_H #include #endif +#ifdef HAVE_SYS_SOCKIO_H +#include +#endif #include #include "libnfs.h" #include "libnfs-raw.h" @@ -53,12 +66,14 @@ static int rpc_disconnect_requeue(struct rpc_context *rpc); static void set_nonblocking(int fd) { + int v = 0; #if defined(WIN32) + long nonblocking=1; + v = ioctlsocket(fd, FIONBIO,&nonblocking); #else - unsigned v; v = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, v | O_NONBLOCK); -#endif +#endif //FIXME } int rpc_get_fd(struct rpc_context *rpc) @@ -137,6 +152,7 @@ static int rpc_read_from_socket(struct rpc_context *rpc) rpc_set_error(rpc, "Ioctl FIONREAD returned error : %d. Closing socket.", errno); return -1; } + if (available == 0) { rpc_set_error(rpc, "Socket has been closed"); return -1; @@ -251,11 +267,11 @@ static int rpc_read_from_socket(struct rpc_context *rpc) int rpc_service(struct rpc_context *rpc, int revents) { if (revents & POLLERR) { - int err = 0; + char err = 0; socklen_t err_size = sizeof(err); if (getsockopt(rpc->fd, SOL_SOCKET, SO_ERROR, - &err, &err_size) != 0 || err != 0) { + (char *)&err, &err_size) != 0 || err != 0) { if (err == 0) { err = errno; } @@ -280,7 +296,7 @@ int rpc_service(struct rpc_context *rpc, int revents) socklen_t err_size = sizeof(err); if (getsockopt(rpc->fd, SOL_SOCKET, SO_ERROR, - &err, &err_size) != 0 || err != 0) { + (char *)&err, &err_size) != 0 || err != 0) { if (err == 0) { err = errno; } @@ -485,7 +501,7 @@ int rpc_set_udp_destination(struct rpc_context *rpc, char *addr, int port, int i freeaddrinfo(ai); rpc->is_broadcast = is_broadcast; - setsockopt(rpc->fd, SOL_SOCKET, SO_BROADCAST, &is_broadcast, sizeof(is_broadcast)); + setsockopt(rpc->fd, SOL_SOCKET, SO_BROADCAST, (char *)&is_broadcast, sizeof(is_broadcast)); return 0; }