Changeset 4572
- Timestamp:
- 02/17/10 14:12:07 (5 months ago)
- Location:
- trunk/varnish-cache
- Files:
-
- 3 modified
-
bin/varnishd/cache_acceptor.c (modified) (5 diffs)
-
include/libvarnish.h (modified) (1 diff)
-
lib/libvarnish/tcp.c (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/varnish-cache/bin/varnishd/cache_acceptor.c
r4565 r4572 106 106 struct timeval tv; 107 107 socklen_t l; 108 int i; 108 109 109 110 l = sizeof lin; 110 AZ(getsockopt(fd, SOL_SOCKET, SO_LINGER, &lin, &l)); 111 i = getsockopt(fd, SOL_SOCKET, SO_LINGER, &lin, &l); 112 if (i) { 113 TCP_Assert(i); 114 return; 115 } 111 116 assert(l == sizeof lin); 112 117 if (memcmp(&lin, &linger, l)) … … 115 120 #ifdef SO_SNDTIMEO_WORKS 116 121 l = sizeof tv; 117 AZ(getsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &l)); 122 i = getsockopt(fd, SOL_SOCKET, SO_SNDTIMEO, &tv, &l); 123 if (i) { 124 TCP_Assert(i); 125 return; 126 } 118 127 assert(l == sizeof tv); 119 128 if (memcmp(&tv, &tv_sndtimeo, l)) … … 127 136 #ifdef SO_RCVTIMEO_WORKS 128 137 l = sizeof tv; 129 AZ(getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &l)); 138 i = getsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, &tv, &l); 139 if (i) { 140 TCP_Assert(i); 141 return; 142 } 130 143 assert(l == sizeof tv); 131 144 if (memcmp(&tv, &tv_rcvtimeo, l)) … … 169 182 sock_test(sp->fd); 170 183 if (need_linger) 171 AZ(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER,184 TCP_Assert(setsockopt(sp->fd, SOL_SOCKET, SO_LINGER, 172 185 &linger, sizeof linger)); 173 186 #ifdef SO_SNDTIMEO_WORKS 174 187 if (need_sndtimeo) 175 AZ(setsockopt(sp->fd, SOL_SOCKET, SO_SNDTIMEO,188 TCP_Assert(setsockopt(sp->fd, SOL_SOCKET, SO_SNDTIMEO, 176 189 &tv_sndtimeo, sizeof tv_sndtimeo)); 177 190 #endif 178 191 #ifdef SO_RCVTIMEO_WORKS 179 192 if (need_rcvtimeo) 180 AZ(setsockopt(sp->fd, SOL_SOCKET, SO_RCVTIMEO,193 TCP_Assert(setsockopt(sp->fd, SOL_SOCKET, SO_RCVTIMEO, 181 194 &tv_rcvtimeo, sizeof tv_rcvtimeo)); 182 195 #endif … … 366 379 * acceptor thread, to reduce syscall density of the latter. 367 380 */ 368 TCP_nonblocking(sp->fd); 369 if (vca_act->pass == NULL) 381 if (TCP_nonblocking(sp->fd)) 382 vca_close_session(sp, "remote closed"); 383 else if (vca_act->pass == NULL) 370 384 assert(sizeof sp == write(vca_pipes[1], &sp, sizeof sp)); 371 385 else -
trunk/varnish-cache/include/libvarnish.h
r4458 r4572 61 61 #define TCP_PORTBUFSIZE 16 62 62 63 #define TCP_Check(a) ((a) == 0 || errno == ECONNRESET || errno == ENOTCONN) 64 65 #define TCP_Assert(a) assert(TCP_Check(a)) 66 63 67 void TCP_myname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen); 64 68 void TCP_hisname(int sock, char *abuf, unsigned alen, char *pbuf, unsigned plen); 65 69 int TCP_filter_http(int sock); 66 voidTCP_blocking(int sock);67 voidTCP_nonblocking(int sock);68 voidTCP_linger(int sock, int linger);70 int TCP_blocking(int sock); 71 int TCP_nonblocking(int sock); 72 int TCP_linger(int sock, int linger); 69 73 #ifdef SOL_SOCKET 70 74 void TCP_name(const struct sockaddr *addr, unsigned l, char *abuf, -
trunk/varnish-cache/lib/libvarnish/tcp.c
r4567 r4572 155 155 */ 156 156 157 void 157 int 158 158 TCP_blocking(int sock) 159 159 { 160 int i ;160 int i, j; 161 161 162 162 i = 0; 163 AZ(ioctl(sock, FIONBIO, &i)); 164 } 165 166 void 163 j = ioctl(sock, FIONBIO, &i); 164 TCP_Assert(j); 165 return (j); 166 } 167 168 int 167 169 TCP_nonblocking(int sock) 168 170 { 169 int i ;171 int i, j; 170 172 171 173 i = 1; 172 AZ(ioctl(sock, FIONBIO, &i)); 174 j = ioctl(sock, FIONBIO, &i); 175 TCP_Assert(j); 176 return (j); 173 177 } 174 178 … … 256 260 */ 257 261 258 void 262 int 259 263 TCP_linger(int sock, int linger) 260 264 { … … 265 269 lin.l_onoff = linger; 266 270 i = setsockopt(sock, SOL_SOCKET, SO_LINGER, &lin, sizeof lin); 267 assert(i == 0 || errno == EBADF); 268 } 271 TCP_Assert(i); 272 return (i); 273 }
