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
Author: Michael Gschwandtner
Date: Mon, 14 Apr 2003 21:31
Date: Mon, 14 Apr 2003 21:31
58 lines
2665 bytes
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
Author: Bernd Petrovitsch
Date: Mon, 14 Apr 2003 19:59
Date: Mon, 14 Apr 2003 19:59
10 lines
1581 bytes
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
Author: Norbert Kaufmann
Date: Tue, 15 Apr 2003 07:38
Date: Tue, 15 Apr 2003 07:38
23 lines
1996 bytes
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
Author: Michael Gschwandtner
Date: Tue, 15 Apr 2003 09:05
Date: Tue, 15 Apr 2003 09:05
18 lines
1728 bytes
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
Author: Stefan Taferner
Date: Tue, 15 Apr 2003 09:44
Date: Tue, 15 Apr 2003 09:44
57 lines
2315 bytes
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