Mam o to taki kod: gdy go uruchomie pokazuje mi sie "blad nasluchu" czyli co s z "listen" jest nie tak:/

#include <winsock.h> 
#include <iostream>
#define BACKLOG 10
using namespace std ;
int main() 
{ 
WSADATA wsaData; 
WSAStartup(MAKEWORD(1,1),&wsaData);    // inicjacja biblioteki ws2_32.dll 
int s, error, adrelen, new_connect; // zmiena gniazda, error, accept, nowe polaczenie
const char witaj[]="\n*****-Nasz Wlasny Serwer 1.0-*****\nJak sie nazywasz : ";
sockaddr_in addr; // zmienie do polaczen
addr.sin_family      = AF_INET;
addr.sin_port        = htons(7171);   // port
addr.sin_addr.s_addr=htonl(INADDR_ANY); // kazdy moze sie polaczyc:]
memset(&(addr.sin_zero), '\0', 8); // wyzerowanie reszty struktury
s=socket(AF_INET, SOCK_DGRAM, 0);  // gniazdo
  if (s<0) 
    {
           cout << "Soccket error";
           perror("socket");
           return 0;
    }
error= bind(s, (struct sockaddr *)&addr, sizeof(sockaddr));
  if (error<0)
  {
           cout << "Bind error";
           perror("bind");
           closesocket( s );
           return 0;
  }
//  listen(s, BACKLOG);
error=  listen(s, BACKLOG);
if (error==-1)
{
            cout <<"blad nasluchu\n";
            perror("listen");
            closesocket( s );
            return 0;
 }

while (1) {
      adrelen= sizeof(struct sockaddr_in);
new_connect = accept(s, (struct sockaddr *)&addr, &adrelen); // nasluchaj dopoki sie ktos nie polczacy
 if(new_connect<0); {
                    perror("send");
                    return 0;
 }
      cout << " polaczenie przyjete\n";
      send(new_connect,witaj,sizeof(witaj),0); // wysylam powitanie
      }
closesocket(new_connect);
closesocket( s );
WSACleanup();                          // zamkniecie biblioteki 
return 0; 
}

Bo jesli zapisze "listen" tak jak na dole, to pojawia mi sie "polaczenie przyjete" i zamyka sie program:/ co mam zrobic aby czekal az ktos sie polaczy??

listen(s, BACKLOG);