Winsock problem

0

Kod:

Kopiuj
int main()
{ 
    sockaddr_in adr_serwer, adr_client;
    int serwer_fd, client_fd, yes = 1;
    unsigned int sinsize;
    if((serwer_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        cout << "\n\aSOCKET";
        return -1;
    }
    else
        cout << " SOCK OK";
    if((setsockopt(serwer_fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int))) == -1)
    {
        cout << "\n\aSETSOCKOPT";
        return -1;
    }
    else
        cout << " SETSOCKOPT OK";
    adr_serwer.sin_family = AF_INET;
    adr_serwer.sin_addr.s_addr = INADDR_ANY;
    adr_serwer.sin_port = htons(7801);
    memset(&(adr_serwer.sin_zero ), '\0', 8 );
    if((bind(serwer_fd, (sockaddr*)&adr_serwer, sizeof(sockaddr))) == -1)
    {
        cout << "\n\aBIND";
        return -1;
    }
    else
        cout << " BIND OK";
//tutaj 
    cout << "TO JUŻ SIĘ NIE WYŚWIETLA";
    if(listen(serwer_fd, 1) == -1)
    {
        cout << "\nLISTEN";
        return -1;
    }
    return 0;
}

Wynik: SOCK OK SETSOCKOPT OK BIND OK

Pisze na linuksie. Dlaczego program zatrzymuje się w miejscu //tutaj? "TO JUŻ SIĘ NIE WYŚWIETLA" nie zostaje wyświetlone. Proszę o pomoc.

Endrju
  • Rejestracja:około 22 lata
  • Ostatnio:ponad rok
0

Zapewne przez to, że listen wciąż trwa. Strumienie są buforowane, więc to co wsadzisz w cout nie jest wyświetlane od razu. Zobacz to: cout << "TO JUŻ SIĘ NIE WYŚWIETLA" << flush;.


"(...) otherwise, the behavior is undefined".
0

Faktycznie, dzięki.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.