Changeset 1863
- Timestamp:
- 11/03/07 00:34:22 (6 years ago)
- File:
-
- 1 edited
-
zzuf/trunk/src/lib-fd.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
zzuf/trunk/src/lib-fd.c
r1862 r1863 194 194 #endif 195 195 196 #if defined AF_INET6 197 # define case_AF_INET6 case AF_INET6: 198 #else 199 # define case_AF_INET6 200 #endif 201 202 #define CONNECTION(fn, addr) \ 203 do \ 204 { \ 205 LOADSYM(fn); \ 206 ret = ORIG(fn)(sockfd, addr, addrlen); \ 207 if(!_zz_ready || _zz_islocked(-1) || !_zz_network) \ 208 return ret; \ 209 if(ret >= 0) \ 210 { \ 211 const struct sockaddr_in* in = (const struct sockaddr_in *)addr; \ 212 long int port; \ 213 switch(addr->sa_family) \ 214 { \ 215 case AF_UNSPEC: \ 216 if(addrlen < sizeof(struct sockaddr_in)) \ 217 break; \ 218 /* Fall through */ \ 219 case AF_INET: \ 220 case_AF_INET6 \ 221 port = ntohs(in->sin_port); \ 222 if(!_zz_portwatched(port)) \ 223 { \ 224 _zz_unregister(sockfd); \ 225 return ret; \ 226 } \ 227 break; \ 228 default: \ 229 break; \ 230 } \ 231 debug("%s(%i, %p, %i) = %i", __func__, \ 232 sockfd, addr, (int)addrlen, ret); \ 233 } \ 234 } while(0); 235 196 236 #if defined HAVE_BIND 197 237 int NEW(bind)(int sockfd, const struct sockaddr *my_addr, SOCKLEN_T addrlen) 198 238 { 199 int ret; 200 201 LOADSYM(bind); 202 ret = ORIG(bind)(sockfd, my_addr, addrlen); 203 if(!_zz_ready || _zz_islocked(-1) || !_zz_network) 204 return ret; 205 206 if(ret >= 0) 207 { 208 const struct sockaddr_in* in = (const struct sockaddr_in *)my_addr; 209 long int port; 210 211 switch(my_addr->sa_family) 212 { 213 case AF_INET: 214 #if defined AF_INET6 215 case AF_INET6: 216 #endif 217 case AF_UNSPEC: 218 port = ntohs(in->sin_port); 219 if(!_zz_portwatched(port)) 220 { 221 _zz_unregister(sockfd); 222 return ret; 223 } 224 break; 225 default: 226 break; 227 } 228 229 debug("%s(%i, %p, %i) = %i", __func__, 230 sockfd, my_addr, (int)addrlen, ret); 231 } 232 233 return ret; 239 int ret; CONNECTION(bind, my_addr); return ret; 234 240 } 235 241 #endif … … 239 245 SOCKLEN_T addrlen) 240 246 { 241 int ret; 242 243 LOADSYM(connect); 244 ret = ORIG(connect)(sockfd, serv_addr, addrlen); 245 if(!_zz_ready || _zz_islocked(-1) || !_zz_network) 246 return ret; 247 248 if(ret >= 0) 249 { 250 const struct sockaddr_in* in = (const struct sockaddr_in *)serv_addr; 251 long int port; 252 253 switch(serv_addr->sa_family) 254 { 255 case AF_INET: 256 #if defined AF_INET6 257 case AF_INET6: 258 #endif 259 case AF_UNSPEC: 260 port = ntohs(in->sin_port); 261 if(!_zz_portwatched(port)) 262 { 263 _zz_unregister(sockfd); 264 return ret; 265 } 266 break; 267 default: 268 break; 269 } 270 271 debug("%s(%i, %p, %i) = %i", __func__, 272 sockfd, serv_addr, (int)addrlen, ret); 273 } 274 275 return ret; 247 int ret; CONNECTION(connect, serv_addr); return ret; 276 248 } 277 249 #endif
Note: See TracChangeset
for help on using the changeset viewer.
