Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2017-08-06, 00:17
  #13
Moderator
vhes avatar
Jag rekommenderar dig verkligen att sluta testa med Chrome. Du har inte en webbserver, så en webbläsare är inte rätt verktyg att testa med. Anslut med en telnetklient istället, så du faktiskt får se dina svar ordentligt.

Vad gäller felmeddelandet så tycker jag den koden ser märklig ut. Att döma av dokumentationen för gai_strerror så tolkar den inte felkoder från bind, så det verkar fel att använda den till det. Kanske bör pröva något i stil med hanteringen i exemplet i manual-sidan till bind så du faktiskt får se vad det är för fel du får.
Citera
2017-08-06, 11:19
  #14
Moderator
RostigHinks avatar
Det går bra att testa med en webbläsare men servern måste svara på rätt sätt om den ska skriva ut ditt lilla meddelande. Ändra texten du sänder med send().
Kod:
  char mess[] = "HTTP/1.1 200 OK\nDate: Sun, 6 Aug 2017 09:12:00 GMT\nServer: Junk/0.1.1 (Unix)  (Ubuntu/Linux)\nLast-Modified: Wed, 08 Jan 2003 23:11:55 GMT\nEtag: \"3f80f-1b6-3e1cb03b\"\nAccept-Ranges: bytes\nContent-Length: 8\nConnection: close\nContent-Type: text/html; charset=UTF-8\n\nWelcome\n";
  ....
  while (1) {
  ....
    status = send(new_conn_fd, mess, sizeof mess - 1, 0);
Firefox accepterar svaret. Andra läsare borde funka oxå. Om du kör linux kan du istället använda wget från skalet för att testa då wget inte kräver något protokoll.
Citera
2017-08-06, 12:33
  #15
Medlem
Citat:
Ursprungligen postat av RostigHink
Det går bra att testa med en webbläsare men servern måste svara på rätt sätt om den ska skriva ut ditt lilla meddelande. Ändra texten du sänder med send().
Kod:
  char mess[] = "HTTP/1.1 200 OK\nDate: Sun, 6 Aug 2017 09:12:00 GMT\nServer: Junk/0.1.1 (Unix)  (Ubuntu/Linux)\nLast-Modified: Wed, 08 Jan 2003 23:11:55 GMT\nEtag: \"3f80f-1b6-3e1cb03b\"\nAccept-Ranges: bytes\nContent-Length: 8\nConnection: close\nContent-Type: text/html; charset=UTF-8\n\nWelcome\n";
  ....
  while (1) {
  ....
    status = send(new_conn_fd, mess, sizeof mess - 1, 0);
Firefox accepterar svaret. Andra läsare borde funka oxå. Om du kör linux kan du istället använda wget från skalet för att testa då wget inte kräver något protokoll.

Det löste problemet, tack! Hade glömt att ändra antalet bytes som skulle skickas med.
Citera
2017-08-06, 12:36
  #16
Medlem
Har du en server som fungerar ibland och ibland inte så kan noteras att om man stänger en serverport och kort tid efter försöker öppna den igen så brukar den vara låst - TCP-stacken har en timeout-tid på server-sockets. Finns en flagga SO_REUSEADDR som kan användas av server-sidan för att säga att den verkligen vill direkt återanvända samma socket.

Och som tidigare nämnts - en webläsare är inget bra testverktyg att testa en godtycklig TCP-server. Webläsaren förväntar sig att få prata med en web-server. Och web-servern pratar HTTP-protokollet, dvs det finns krav på exakt hur svaren skall se ut.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback