Avatar billede inglenook Praktikant
17. juni 2005 - 00:24 Der er 3 kommentarer og
1 løsning

Socket lukker ikke forbindelse

Har foelgende kode:

#define PORT 8088 // the port client will be connecting to
#define MAXDATASIZE 100 // max number of bytes we can get at once

void x10send(char *hostname)
{
  int len,sd,status,tmp,n,ix,noblock,postlen;
  int done = 0;
  char *message = (char *)malloc(8),ownhost[100],resp[30];
  struct sockaddr local,remote;
  struct hostent *hostinfo;

  noblock=1;

  sd=socket(AF_INET,SOCK_STREAM,0);
  if(sd<0) {
      printf("Error creating socket: %s\n",strerror(errno));
      goto slut;
  }

  local.sa_family=AF_INET;
  memset(local.sa_data,0,sizeof(local.sa_data));
  status=bind(sd,&local,sizeof(local));
  if(status<0) {
      printf("Error binding socket: %s\n",strerror(errno));
      goto slut;
  }

  hostinfo=gethostbyname(hostname);

  if(!hostinfo) {
      printf("Error looking up host: %s\n",hostname);
      goto slut;
  }

  remote.sa_family=hostinfo->h_addrtype;
  memcpy(remote.sa_data+2,hostinfo->h_addr_list[0],hostinfo->h_length);
  *((short *)remote.sa_data)=PORT;
  tmp=remote.sa_data[0];
  remote.sa_data[0]=remote.sa_data[1];
  remote.sa_data[1]=tmp;
  status=connect(sd,&remote,sizeof(remote));

  if(status!=0) {
      printf("Error connecting to host: %s port: %d\n",hostname,PORT);
      goto slut;
  }



      sleep(1);
          // read response

printf("Sending message\n");
      postlen=8;

  gethostname(ownhost,sizeof(ownhost));
      sprintf(message,"%c%c%c009LM",0x21,0x21,0x21);
          status=send(sd,message,8,0);

          //          sleep(1);

          // read response

          ix=0;
          while ((len=recv(sd,resp+ix,sizeof(resp)-ix-1,0))>0) {

        ix = ix + len;
          }
          resp[ix]='\0';
          printf("%s\n",resp);

             
slut:
free(message);
  close(sd);
  return;
}

int main(int argc, char *argv[])
{

        if (argc != 2)
    {
            fprintf(stderr,"usage: client hostname\n");
            exit(1);
        }


    x10send(argv[1]);
    printf("Done !\n");
        return 0;
}

Problemet er at close(sd); ikke lukker forbindelsen paa serveren.

Forslag ?
Avatar billede bertelbrander Novice
17. juni 2005 - 00:41 #1
Kunne man prøve at kalde shutdown inden close?

http://www.rt.com/man/shutdown.2.html
Avatar billede inglenook Praktikant
17. juni 2005 - 09:49 #2
det var lige det der manglede. Tak for det.

smid lige et svar...
Avatar billede bertelbrander Novice
17. juni 2005 - 20:48 #3
Jeg samler ikke på point.
Avatar billede inglenook Praktikant
18. juni 2005 - 11:48 #4
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester