|
|
|
TCP and sockets
|
|||
|---|---|---|---|
|
#18+
Имеется следующий код с сервера: struct sockaddr_in addr; int flag; if ( (_srv_socket = socket(PF_INET, SOCK_STREAM, 0)) < 0 ) { throw SockConnectionException( "Some error" ); } flag = 1; if ( ::setsockopt(_srv_socket, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof(int)) != 0 ) { throw SockConnectionException( "Some error" ); } setsockopt(_srv_socket, SOL_SOCKET, SO_REUSEPORT, &flag, sizeof(int) ); int data = 1; if (::setsockopt(_srv_socket, SOL_SOCKET, SO_KEEPALIVE, &data, sizeof(data)) < 0) { throw SockConnectionException( "Some error" ); } addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = INADDR_ANY; if ( bind(_srv_socket, reinterpret_cast<struct sockaddr *>(&addr), sizeof(addr)) != 0 ) { throw SockConnectionException( "Some error" ); } if ( listen(_srv_socket, 5) != 0 ) { throw SockConnectionException( "Some error" ); } Цепляются клиенты. До 1000 коннектов все нормально, потом через определенное время сервер закрывает соединения, так как полагает, что данные ему не пришли, т.е. он висит на ожидании данных, а их нет. А новые соединения перестают приниматься. В чем может быть проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 13:10:27 |
|
||
|
TCP and sockets
|
|||
|---|---|---|---|
|
#18+
переполнение буфера, ограничения операционки аффтопитезь: 4 8 15 16 23 42 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 17:15:28 |
|
||
|
TCP and sockets
|
|||
|---|---|---|---|
|
#18+
./devЦепляются клиенты. До 1000 коннектов все нормально, потом через определенное время сервер закрывает соединения, так как полагает, что данные ему не пришли, т.е. он висит на ожидании данных, а их нет. А новые соединения перестают приниматься. В чем может быть проблема? Не совсем понятно, что именно происходит - клиент передает, а сервер ничего не слышит? С приведенным кодом все в порядке, но проблема может находиться не здесь, а в цикле приема соединений, приеме/передаче, закрытии сокетов по таймайту и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2007, 22:39:36 |
|
||
|
TCP and sockets
|
|||
|---|---|---|---|
|
#18+
./dev if ( listen(_srv_socket, 5) != 0 ) { throw SockConnectionException( "Some error" ); } Цепляются клиенты. До 1000 коннектов все нормально, потом через определенное время сервер закрывает соединения, так как полагает, что данные ему не пришли, т.е. он висит на ожидании данных, а их нет. А новые соединения перестают приниматься. В чем может быть проблема? Возможно не успевает получать новые соединения из очереди в связи с загруженностью системы. Попробуй ее увеличить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2007, 10:04:42 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=274&tid=2028067]: |
0ms |
get settings: |
10ms |
get forum list: |
18ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
76ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 233ms |
| total: | 417ms |

| 0 / 0 |
