Changeset 81784 in vbox for trunk/src/VBox/NetworkServices/NAT
- Timestamp:
- Nov 11, 2019 10:23:37 PM (5 years ago)
- svn:sync-xref-src-repo-rev:
- 134575
- Location:
- trunk/src/VBox/NetworkServices/NAT
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/NetworkServices/NAT/fwtcp.c
r76553 r81784 239 239 } 240 240 241 #ifdef RT_OS_LINUX 242 status = proxy_fixup_accepted_socket(newsock); 243 if (status < 0) { 244 proxy_reset_socket(newsock); 245 return POLLIN; 246 } 247 #endif 241 248 242 249 if (ss.ss_family == PF_INET) { -
trunk/src/VBox/NetworkServices/NAT/proxy.c
r76553 r81784 410 410 return s; 411 411 } 412 413 414 #ifdef RT_OS_LINUX 415 /** 416 * Fixup a socket returned by accept(2). 417 * 418 * On Linux a socket returned by accept(2) does NOT inherit the socket 419 * options from the listening socket! We need to repeat parts of the 420 * song and dance we did above to make it non-blocking. 421 */ 422 int 423 proxy_fixup_accepted_socket(SOCKET s) 424 { 425 int sflags; 426 int status; 427 428 sflags = fcntl(s, F_GETFL, 0); 429 if (sflags < 0) { 430 DPRINTF(("F_GETFL: %R[sockerr]\n", SOCKERRNO())); 431 return -1; 432 } 433 434 status = fcntl(s, F_SETFL, sflags | O_NONBLOCK); 435 if (status < 0) { 436 DPRINTF(("O_NONBLOCK: %R[sockerr]\n", SOCKERRNO())); 437 return -1; 438 } 439 440 return 0; 441 } 442 #endif /* RT_OS_LINUX */ 412 443 413 444 -
trunk/src/VBox/NetworkServices/NAT/proxy.h
r76576 r81784 68 68 SOCKET proxy_connected_socket(int, int, ipX_addr_t *, u16_t); 69 69 SOCKET proxy_bound_socket(int, int, struct sockaddr *); 70 #ifdef RT_OS_LINUX 71 int proxy_fixup_accepted_socket(SOCKET); 72 #endif 70 73 void proxy_reset_socket(SOCKET); 71 74 int proxy_sendto(SOCKET, struct pbuf *, void *, size_t);
Note:
See TracChangeset
for help on using the changeset viewer.