Не удается принять входящие соединения через сокет c в Mac OS (Mojave) из-за пакета tcp RST

У меня проблема с сервером на MacOS, использующим функции сокетов POSIX. Проблема в том, что когда мой клиент пытается подключиться к серверу с connect() функция сервер (macOS) отправляет tcp RST-пакет и закрывает соединение. Я пытался отключить FW, но проблема все еще существует.

Я ставлю только то, что считаю полезным для вас, чтобы понять мою проблему. Тот же идентичный код работает в Linux (Ubuntu) очень хорошо. Я думаю, что это проблема политики безопасности в MacOS.

Код сервера:

int main (int argc, char *argv[]){
    int s;
    struct sockaddr_in saddr, caddr;
    socklen_t addrlen = sizeof(struct sockaddr_in);
    inet_aton(argv[1], &saddr.sin_addr);
    uint16_t port = htons(atoi(argv[2]));
    int result;
    int bklog = 10;
    int i,n;

    int *sockVett;
    sockVett = new int[nESP];

    while(1) {
        s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (s == -1 ){
            cout << "socket() failed\n";
            return -1;

        }
        for(i=0; i < nESP; i++){
            sockVett[i] = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
        }

        saddr.sin_family = AF_INET;
        saddr.sin_port = port;
        saddr.sin_addr.s_addr = INADDR_ANY;

        bind(s, (struct sockaddr *) &saddr, sizeof(saddr));

        listen (s, bklog);


        for(i=0; i < nESP; i++){
            if(debug) printf("SockVett[%d] is waiting for connection..\n", i+1);
            sockVett[i] = accept(s, (struct sockaddr *) &caddr, &addrlen);
            if(debug) printf("SockVett[%d] connected\n", i+1);
        }
        if(debug) printf("All ESP connected\n\n ---Start program---\n");


    }
}

Приложение моего сервера блокируется при первом вызове accept() для цикла for(...), и с помощью Wireshark я заметил, что мой сервер отправляет пакет TCP RST и поэтому закрывает соединение.

Спасибо всем!

0 ответов

Другие вопросы по тегам