On Tue, September 19, 2006 14:11, Heiko Schlittermann said:
Marcus Obst marcus.obst@s2003.tu-chemnitz.de (Di 19 Sep 2006 13:58:04 CEST):
On Tue, Sep 19, 2006 at 01:30:55PM +0200, martin schmidt wrote:
int recv_socket(int s, char* buf){ int bytes; if((bytes=recv(s,buf,sizeof(buf)-1,0))==-1) perror("recv() failed");
~~~~~~~~~~~~ -> hier kommt immer 3 heraus
Komisch. Bei mir kommt 7 raus... ;-)
int main (int argc, char *argv[]){ int sock, bytes; char buf[BUFFER_SIZE];
hier wuerde sizeof(buf) auch die von dir erwartete BUFFER_SIZE liefern.
sizeof(*buf)
sollte auch verstanden werden.
Von wem?
sizeof(buf) == BUFFER_SIZE sizeof(*buf) == sizeof(char) == 1
Uebrigens sollte man nicht nur wegen moeglicher Assoziationen mit zum Glueck nicht mehr existenten radikalen Organisationen auf solche Konstrukte verzichten:
#define SA struct sockaddr
...es macht den Code auch nicht lesbarer.
Ausserdem sollten sockets immer asynchron (via select, poll, oder sigio) behandelt werden - sonst haengt es im unguenstigsten Augenblick.
Konrad