X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fsocket.c;h=653853549e45b29627eb5be44c631460679da098;hb=7057e733c1465661c410b65d90e4c5d0939f1617;hp=9b16b1b5bc96d045c136945d1dbdd6f69f3a433b;hpb=9a9126c3d94e38c9e0ad7d4f0ba442b96a156ca6;p=deb_libnfs.git diff --git a/lib/socket.c b/lib/socket.c index 9b16b1b..6538535 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -14,26 +14,35 @@ You should have received a copy of the GNU Lesser General Public License along with this program; if not, see . */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#ifdef AROS +#include "aros_compat.h" +#endif + #ifdef WIN32 #include "win32_compat.h" #else -#include #include -#include -#include #include #endif/*WIN32*/ -#ifdef HAVE_CONFIG_H -#include "config.h" +#ifdef HAVE_POLL_H +#include #endif -#ifdef AROS -#include "aros_compat.h" +#ifdef HAVE_UNISTD_H +#include #endif -#ifdef HAVE_POLL_H -#include +#ifdef HAVE_SYS_IOCTL_H +#include +#endif + +#ifdef HAVE_SYS_SOCKET_H +#include #endif #include @@ -69,7 +78,7 @@ static void set_nonblocking(int fd) int v = 0; #if defined(WIN32) long nonblocking=1; - v = ioctlsocket(fd, FIONBIO,&nonblocking); + v = ioctl(fd, FIONBIO, &nonblocking); #else v = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, v | O_NONBLOCK); @@ -118,11 +127,7 @@ static int rpc_write_to_socket(struct rpc_context *rpc) total = rpc->outqueue->outdata.size; -#if defined(WIN32) | defined(AROS) count = send(rpc->fd, rpc->outqueue->outdata.data + rpc->outqueue->written, total - rpc->outqueue->written, 0); -#else - count = write(rpc->fd, rpc->outqueue->outdata.data + rpc->outqueue->written, total - rpc->outqueue->written); -#endif if (count == -1) { if (errno == EAGAIN || errno == EWOULDBLOCK) { return 0; @@ -153,11 +158,7 @@ static int rpc_read_from_socket(struct rpc_context *rpc) assert(rpc->magic == RPC_CONTEXT_MAGIC); -#if defined(WIN32) - if (ioctlsocket(rpc->fd, FIONREAD, &available) != 0) { -#else if (ioctl(rpc->fd, FIONREAD, &available) != 0) { -#endif rpc_set_error(rpc, "Ioctl FIONREAD returned error : %d. Closing socket.", errno); return -1; } @@ -202,11 +203,7 @@ static int rpc_read_from_socket(struct rpc_context *rpc) if (rpc->inpos < 4) { size = 4 - rpc->inpos; -#if defined(WIN32) | defined(AROS) count = recv(rpc->fd, rpc->inbuf + rpc->inpos, size, 0); -#else - count = read(rpc->fd, rpc->inbuf + rpc->inpos, size); -#endif if (count == -1) { if (errno == EINTR) { return 0; @@ -242,11 +239,7 @@ static int rpc_read_from_socket(struct rpc_context *rpc) size = rpc->insize - rpc->inpos; } -#if defined(WIN32) | defined(AROS) count = recv(rpc->fd, rpc->inbuf + rpc->inpos, size, 0); -#else - count = read(rpc->fd, rpc->inbuf + rpc->inpos, size); -#endif if (count == -1) { if (errno == EINTR) { return 0; @@ -411,8 +404,12 @@ static int rpc_connect_sockaddr_async(struct rpc_context *rpc, struct sockaddr_s static int portOfs = 0; const int firstPort = 512; /* >= 512 according to Sun docs */ const int portCount = IPPORT_RESERVED - firstPort; - int startOfs = portOfs, port, rc; + int startOfs, port, rc; + if (portOfs == 0) { + portOfs = time(NULL) % 400; + } + startOfs = portOfs; do { rc = -1; port = htons(firstPort + portOfs); @@ -496,11 +493,7 @@ int rpc_disconnect(struct rpc_context *rpc, char *error) rpc_unset_autoreconnect(rpc); if (rpc->fd != -1) { -#if defined(WIN32) - closesocket(rpc->fd); -#else close(rpc->fd); -#endif } rpc->fd = -1; @@ -532,11 +525,7 @@ static int rpc_reconnect_requeue(struct rpc_context *rpc) assert(rpc->magic == RPC_CONTEXT_MAGIC); if (rpc->fd != -1) { -#if defined(WIN32) - closesocket(rpc->fd); -#else close(rpc->fd); -#endif } rpc->fd = -1;