It seems like more and more developers are making security mistakes when dealing with sockets. See if you can Spot the Bug.

void Socket_Setup(void)
{
  WORD wVersionRequested;
  WSADATA wsaData;
  wVersionRequested = MAKEWORD( 2, 2 );
  ::WSAStartup(wVersionRequested, &wsaData);
 
  SOCKET sTCPServer = ::socket(AF_INET, SOCK_STREAM, 0);
  struct sockaddr_in saTCPServAddr;
  saTCPServAddr.sin_family = AF_INET;
  saTCPServAddr.sin_addr.S_un.S_addr = ::htonl(INADDR_ANY);
  saTCPServAddr.sin_port = ::htons(5678);
  int len = sizeof(saTCPServAddr);
 
  int iFail =::bind(sTCPServer, (struct sockaddr*)&saTCPServAddr, len);
  DWORD dwErr;
  if(0 != iFail)
  {
    dwErr = ::WSAGetLastError();
    printf("\n\t Error occured.\n");
    return;
  }
 
  iFail = ::listen(sTCPServer, 2);
 
  struct sockaddr_in saClient;
  int iClsize = sizeof(saClient);
  SOCKET sClient = ::accept(sTCPServer, (struct sockaddr*)&saClient ,&iClsize);
 
  char strData[1024];
  ::recv(sClient, strData, 1024, 0);
 
  printf("\n\nRealServer--Data from client --- %s ---", strData);
 
  ::shutdown(sTCPServer, SD_BOTH);
 
  ::WSACleanup();
 
  return;
}