X-Git-Url: https://git.piment-noir.org/?a=blobdiff_plain;f=lib%2Fsocket.c;h=413ebbe4c8e4009cca6f0ccbc506a5a02b657014;hb=4a2b08768a0d9ec9f5604da76f8e41263f20b821;hp=8ad5e4e891b3814bd899c500dc9d5546e7e7d570;hpb=0222cbfdf1884ae9d128d7e512ca82e76cd66414;p=deb_libnfs.git diff --git a/lib/socket.c b/lib/socket.c index 8ad5e4e..413ebbe 100644 --- a/lib/socket.c +++ b/lib/socket.c @@ -30,6 +30,7 @@ #endif #include #include +#include #include #include #include @@ -70,12 +71,18 @@ static void set_nonblocking(int fd) int rpc_get_fd(struct rpc_context *rpc) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + return rpc->fd; } int rpc_which_events(struct rpc_context *rpc) { - int events = rpc->is_connected ? POLLIN : POLLOUT; + int events; + + assert(rpc->magic == RPC_CONTEXT_MAGIC); + + events = rpc->is_connected ? POLLIN : POLLOUT; if (rpc->is_udp != 0) { /* for udp sockets we only wait for pollin */ @@ -92,9 +99,8 @@ static int rpc_write_to_socket(struct rpc_context *rpc) { int64_t count; - if (rpc == NULL) { - return -1; - } + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (rpc->fd == -1) { rpc_set_error(rpc, "trying to write but not connected"); return -1; @@ -136,6 +142,8 @@ static int rpc_read_from_socket(struct rpc_context *rpc) int pdu_size; int64_t count; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + #if defined(WIN32) if (ioctlsocket(rpc->fd, FIONREAD, &available) != 0) { #else @@ -258,6 +266,8 @@ static int rpc_read_from_socket(struct rpc_context *rpc) int rpc_service(struct rpc_context *rpc, int revents) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (revents & POLLERR) { #ifdef WIN32 char err = 0; @@ -336,11 +346,15 @@ int rpc_service(struct rpc_context *rpc, int revents) void rpc_set_autoreconnect(struct rpc_context *rpc) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + rpc->auto_reconnect = 1; } void rpc_unset_autoreconnect(struct rpc_context *rpc) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + rpc->auto_reconnect = 0; } @@ -348,6 +362,8 @@ static int rpc_connect_sockaddr_async(struct rpc_context *rpc, struct sockaddr_s { int socksize; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + switch (s->ss_family) { case AF_INET: socksize = sizeof(struct sockaddr_in); @@ -424,6 +440,8 @@ int rpc_connect_async(struct rpc_context *rpc, const char *server, int port, rpc { struct sockaddr_in *sin = (struct sockaddr_in *)&rpc->s; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (rpc->fd != -1) { rpc_set_error(rpc, "Trying to connect while already connected"); return -1; @@ -464,6 +482,8 @@ int rpc_connect_async(struct rpc_context *rpc, const char *server, int port, rpc int rpc_disconnect(struct rpc_context *rpc, char *error) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + rpc_unset_autoreconnect(rpc); if (rpc->fd != -1) { @@ -484,6 +504,8 @@ int rpc_disconnect(struct rpc_context *rpc, char *error) static void reconnect_cb(struct rpc_context *rpc, int status, void *data _U_, void *private_data) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (status != RPC_STATUS_SUCCESS) { rpc_error_all_pdus(rpc, "RPC ERROR: Failed to reconnect async"); return; @@ -498,6 +520,8 @@ static int rpc_reconnect_requeue(struct rpc_context *rpc) { struct rpc_pdu *pdu; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (rpc->fd != -1) { #if defined(WIN32) closesocket(rpc->fd); @@ -537,6 +561,8 @@ int rpc_bind_udp(struct rpc_context *rpc, char *addr, int port) struct addrinfo *ai = NULL; char service[6]; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (rpc->is_udp == 0) { rpc_set_error(rpc, "Cant not bind UDP. Not UDP context"); return -1; @@ -580,6 +606,8 @@ int rpc_set_udp_destination(struct rpc_context *rpc, char *addr, int port, int i struct addrinfo *ai = NULL; char service[6]; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + if (rpc->is_udp == 0) { rpc_set_error(rpc, "Can not set destination sockaddr. Not UDP context"); return -1; @@ -613,6 +641,8 @@ int rpc_set_udp_destination(struct rpc_context *rpc, char *addr, int port, int i struct sockaddr *rpc_get_recv_sockaddr(struct rpc_context *rpc) { + assert(rpc->magic == RPC_CONTEXT_MAGIC); + return (struct sockaddr *)&rpc->udp_src; } @@ -621,6 +651,8 @@ int rpc_queue_length(struct rpc_context *rpc) int i=0; struct rpc_pdu *pdu; + assert(rpc->magic == RPC_CONTEXT_MAGIC); + for(pdu = rpc->outqueue; pdu; pdu = pdu->next) { i++; }