🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: de.comp.os.unix.programming
5 messages
5 total messages Started by Michael Gschwandtner Mon, 14 Apr 2003 21:31
socket -1 Problem
#4
Author: Michael Gschwandtner
Date: Mon, 14 Apr 2003 21:31
58 lines
2665 bytes
Ich habe hier ein kurzes Beispielprogramm das meinen Fehler beschreibt
Normalerweise sollte man, wenn man von einem einseitg geschloessenem 
Socket liest -1 zur�ck bekommen. Ich bekomme aber immer nur 0 zur�ck.

Wenn ich mit netstat den Verbindungsstatus kontrolliere ist der 
CLOSE_WAIT. D.h. die Verbindung wurde vom Server geschlossen.

Kann mir bitte jemand sagen warum das nicht funktioniert. Oder 
alternativ eine M�glichkeit wie ich vom Socket die Information 
herausbekomme ob die andere Seite die Verbindung geschlossen hat.

Vielen Dank im Voraus

MfG Mike

----------------------------------------------------
#include <sys/socket.h>
#include <netdb.h>
#include <netinet/in.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>

int main(int argc,char *argv[])
{
	hostent *h;
	struct sockaddr_in sad;
	int sock,received;
	char *req="GET / HTTP/1.0\n\n",inbuff[65000];

	h = gethostbyname ( argv[1] );
	
	sad.sin_port=htons(80);
	memcpy ( &sad.sin_addr.s_addr, h->h_addr_list[0],4 );
	sad.sin_family=AF_INET;

	sock = socket ( AF_INET, SOCK_STREAM, 0 );

	if ( connect ( sock, (struct sockaddr *)&sad, sizeof(struct 
sockaddr_in) ) != -1 )
	{
		printf ("Connected\n");
		write ( sock , req, 16 );
		printf ("Wrote Request\n");

		while ( ( received = read ( sock, inbuff, 65000 ) ) != -1  )
		{
			printf ( "received: %i\n", received );
		}
	}


	close ( sock );

return 0;
}
----------------------------------------------------------
Re: socket -1 Problem
#5
Author: Bernd Petrovitsch
Date: Mon, 14 Apr 2003 19:59
10 lines
1581 bytes
On Mon, 14 Apr 2003 23:31:30 +0200, Michael Gschwandtner wrote:
> Ich habe hier ein kurzes Beispielprogramm das meinen Fehler beschreibt
> Normalerweise sollte man, wenn man von einem einseitg geschloessenem
> Socket liest -1 zur�ck bekommen. Ich bekomme aber immer nur 0 zur�ck.

Wo steht das, da� das so sein sollte (und welchen Wert sollte dann
errno haben)?
read(2) liefert i.A. 0 bei EOF.

	Bernd
Re: socket -1 Problem
#2
Author: Norbert Kaufmann
Date: Tue, 15 Apr 2003 07:38
23 lines
1996 bytes
On Tue, 15 Apr 2003 11:05:49 +0200, Michael Gschwandtner wrote:

> Bernd Petrovitsch wrote:
>> On Mon, 14 Apr 2003 23:31:30 +0200, Michael Gschwandtner wrote:
>> 
>>>Ich habe hier ein kurzes Beispielprogramm das meinen Fehler beschreibt
>>>Normalerweise sollte man, wenn man von einem einseitg geschloessenem
>>>Socket liest -1 zur�ck bekommen. Ich bekomme aber immer nur 0 zur�ck.
>> 
>> 
>> Wo steht das, da� das so sein sollte (und welchen Wert sollte dann
>> errno haben)?
>> read(2) liefert i.A. 0 bei EOF.
>> 
>> 	Bernd
> 
> On error,
>         -1 is returned, and errno is set  appropriately.

das beenden einer verbindung ist kein fehler. dem lesenden wird dies
durch lesen von 0 byte und errno angezeigt ( bei blockierendem read ).

norbert
Re: socket -1 Problem
#1
Author: Michael Gschwandtner
Date: Tue, 15 Apr 2003 09:05
18 lines
1728 bytes
Bernd Petrovitsch wrote:
> On Mon, 14 Apr 2003 23:31:30 +0200, Michael Gschwandtner wrote:
> 
>>Ich habe hier ein kurzes Beispielprogramm das meinen Fehler beschreibt
>>Normalerweise sollte man, wenn man von einem einseitg geschloessenem
>>Socket liest -1 zur�ck bekommen. Ich bekomme aber immer nur 0 zur�ck.
> 
> 
> Wo steht das, da� das so sein sollte (und welchen Wert sollte dann
> errno haben)?
> read(2) liefert i.A. 0 bei EOF.
> 
> 	Bernd

On error,
        -1 is returned, and errno is set  appropriately.

MfG Mike
Re: socket -1 Problem
#3
Author: Stefan Taferner
Date: Tue, 15 Apr 2003 09:44
57 lines
2315 bytes
Bau mal folgendes ein....

Michael Gschwandtner wrote:
> #include <sys/socket.h>
> #include <netdb.h>
> #include <netinet/in.h>
> #include <stdio.h>
> #include <unistd.h>
> #include <string.h>
> #include <arpa/inet.h>

#include <errno.h>

> 
> int main(int argc,char *argv[])
> {
> hostent *h;
> struct sockaddr_in sad;
> int sock,received;
> char *req="GET / HTTP/1.0\n\n",inbuff[65000];
> 
> h = gethostbyname ( argv[1] );
> 
> sad.sin_port=htons(80);
> memcpy ( &sad.sin_addr.s_addr, h->h_addr_list[0],4 );
> sad.sin_family=AF_INET;
> 
> sock = socket ( AF_INET, SOCK_STREAM, 0 );

if (sock < 0)
{
  printf("cannot create socket: %s\n", strerror(errno));
  exit(1);
}

> if ( connect ( sock, (struct sockaddr *)&sad, sizeof(struct
> sockaddr_in) ) != -1 )
> {
>   printf ("Connected\n");
>   write ( sock , req, 16 );
>   printf ("Wrote Request\n");
> 
>   while ( ( received = read ( sock, inbuff, 65000 ) ) != -1  )
>   {
>     printf ( "received: %i\n", received );
>   }
> }

else
  printf("cannot connect to %s: %s\n", argv[1], strerror(errno));

> 
> 
> close ( sock );
> 
> return 0;
> }
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads