[socket] - disable linger by setting SO_LINGER to 0 seconds
authorMemphiz <memphis@machzwo.de>
Thu, 10 Apr 2014 18:30:30 +0000 (20:30 +0200)
committerMemphiz <memphis@machzwo.de>
Thu, 10 Apr 2014 18:34:11 +0000 (20:34 +0200)
lib/socket.c

index d025e070e017091e1f796178c139e8ff44c7cf48..aede89adf65c56a7050301522b4ca438ed6ba65b 100644 (file)
@@ -95,6 +95,14 @@ static void set_nonblocking(int fd)
 #endif //FIXME
 }
 
+static void set_nolinger(int fd)
+{
+       struct linger lng;
+       lng.l_onoff = 1;
+       lng.l_linger = 0;
+       setsockopt(fd, SOL_SOCKET, SO_LINGER, &lng, sizeof(lng));
+}
+
 #ifdef HAVE_NETINET_TCP_H
 int set_tcp_sockopt(int sockfd, int optname, int value)
 {
@@ -504,6 +512,7 @@ static int rpc_connect_sockaddr_async(struct rpc_context *rpc, struct sockaddr_s
        }
 
        set_nonblocking(rpc->fd);
+       set_nolinger(rpc->fd);
 
        if (connect(rpc->fd, (struct sockaddr *)s, socksize) != 0 && errno != EINPROGRESS) {
                rpc_set_error(rpc, "connect() to server failed. %s(%d)", strerror(errno), errno);