сервер с несколькими портами не получает все передачи - PullRequest
3 голосов
/ 04 октября 2011

Я написал однопоточный сервер в c под Linux, этот сервер прослушивает несколько портов, сервер должен получать текстовые сообщения, я использую этот код для прослушивания сокетов:

while(1){
FD_ZERO(&socks);
for (i = 0 ; i < IndexConnctedSocket ; i++ )
    FD_SET(newSocketFds[i],&socks);

readsocks = select(highNewSocket + 1,&socks,(fd_set*) 0,
        (fd_set*) 0 ,&timeout);

    for (j = 0 ; j <= index ; j++ ){
        if ( FD_ISSET(newSocketFds[j],&socks) != 0 ){
            bzero(buffer, 2048);
            n = read(newSocketFds[j], buffer, 2048);
            if (n < 0)
                error("ERROR reading from socket");
            i = 0;

            n = write(newSocketFds[j], "I got your message  ",18);
            if (n < 0)
                error("ERROR writing to socket");
            }
}

, но когдаЯ отправляю сообщения на сервер (через клиент, который подключается ко всем сокетам), некоторые из сообщений теряются, и когда я подключаюсь к серверу с разных клиентов, это работает отлично.

1 Ответ

0 голосов
/ 04 октября 2011

TCP не имеет сообщений, поэтому можно получить несколько «сообщений» за одно чтение (). Попробуйте проверить результат (n) вашего вызова read (). Вы можете проверить буфер с помощью

printf("read(%d): %*.*s\n", n, n, n , buffer);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...