| 80 | } |
| 81 | |
| 82 | void SocketServerTCP::accept_worker () |
| 83 | { |
| 84 | int len = sizeof (client_addr); |
| 85 | connected_socket = ::accept (server_socket, (struct sockaddr *)&client_addr, &len); |
| 86 | if (connected_socket != INVALID_SOCKET) |
| 87 | { |
| 88 | // ensure that library will not hang in blocking recv/send call |
| 89 | DWORD timeout = 3000; |
| 90 | DWORD value = 1; |
| 91 | DWORD buf_size = 65536 * 4; |
| 92 | setsockopt ( |
| 93 | connected_socket, IPPROTO_TCP, TCP_NODELAY, (const char *)&value, sizeof (value)); |
| 94 | setsockopt ( |
| 95 | connected_socket, SOL_SOCKET, SO_RCVTIMEO, (const char *)&timeout, sizeof (timeout)); |
| 96 | setsockopt ( |
| 97 | connected_socket, SOL_SOCKET, SO_SNDTIMEO, (const char *)&timeout, sizeof (timeout)); |
| 98 | setsockopt ( |
| 99 | connected_socket, SOL_SOCKET, SO_RCVBUF, (const char *)&buf_size, sizeof (buf_size)); |
| 100 | |
| 101 | client_connected = true; |
| 102 | } |
| 103 | } |
| 104 | |
| 105 | int SocketServerTCP::send (const void *data, int size) |
| 106 | { |