Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / TCP and sockets / 2 сообщений из 2, страница 1 из 1
03.10.2007, 13:08:13
    #34843538
./dev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCP and sockets
Имеется следующий код с сервера:

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 коннектов все нормально, потом через определенное время сервер закрывает соединения, так как полагает, что данные ему не пришли, т.е. он висит на ожидании данных, а их нет. А новые соединения перестают приниматься. В чем может быть проблема?
...
Рейтинг: 0 / 0
03.10.2007, 13:55:29
    #34843784
masteroid
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
TCP and sockets
кусок явно не полный.
Что касается до listen - то он ставит в очередь на ожидание accept'а до 5 соединений - если приходит 6е, пока предыдущие 5 не прошли accept - 6е вылетает с ошибкой refused to connect
...
Рейтинг: 0 / 0
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / TCP and sockets / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]