ServerSocket генерирует InvalidArgumentException, но в документах не указывается, почему.Зачем? - PullRequest
0 голосов
/ 01 июля 2019

Я использую Poco для создания веб-сервера. Я столкнулся с ошибкой в ​​библиотеке ServerSocket. Вот минимальный код для воспроизведения ошибки.

#include <iostream>
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketAddress.h"
#define PORT (unsigned short) 3000
int main()
{
    Poco::Net::ServerSocket x;
    x.bind(PORT);
    Poco::Net::StreamSocket conn;
    Poco::Net::SocketAddress clientAddr;
    try {
        conn = x.acceptConnection(clientAddr);
    }
    catch (Poco::InvalidArgumentException e) {
        printf("Oh no! %s\n", e.displayText().c_str());
        return 1;
    }
    printf("Huzzah!");
    return 0;
}

Я пытался просмотреть [документы] (https://pocoproject.org/docs/Poco.Net.ServerSocket.html#25093), чтобы понять ошибку, но она даже не перечисляет эту функцию как выдающую эту ошибку. Я также попробовал версию функции без параметров, и он по-прежнему выдает это исключение (которое указывает на то, что это не функция, а подфункция, выдающая ошибку). Почему? и как я могу это исправить или обойти это?

1 Ответ

1 голос
/ 01 июля 2019

Как сказал WhozCraig, проблема не в том, чтобы перевести его в состояние прослушивания. Код должен быть

#include <iostream>
#include "Poco/Net/ServerSocket.h"
#include "Poco/Net/StreamSocket.h"
#include "Poco/Net/SocketAddress.h"
#define PORT (unsigned short) 3000
int main()
{
    Poco::Net::ServerSocket x;
    x.bind(PORT);
    x.listen(1); // or number of acceptable connections
    Poco::Net::StreamSocket conn;
    Poco::Net::SocketAddress clientAddr;
    try {
        conn = x.acceptConnection(clientAddr);
    }
    catch (const Poco::InvalidArgumentException& e) {
        printf("Oh no! %s\n", e.displayText().c_str());
        return 1;
    }
    printf("Huzzah!");
    return 0;
}
...