Socket datagram again.
hubert at spica.ucsb.edu
hubert at spica.ucsb.edu
Wed May 15 12:21:04 AEST 1991
Thanks to Kiartik and Oliver. I got the datagram working.
But when I tried the following program(which could be wrong. I am a rooky.)
I found out that if I don't add exit(0) at the end of the program. The
a.out will give me segment fault. Whay is that?
#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/socket.h>
struct record
{
int from;
int to[10];
}
main()
{
int s1,s2,ret,fromlen;
struct sockaddr sock1,sock2,stemp;
struct record r1,r2;
sock1.sa_family=PF_UNIX; sock2.sa_family=PF_UNIX;
sprintf(sock1.sa_data,"sock1"); sprintf(sock2.sa_data,"sock2");
unlink(sock1.sa_data); unlink(sock2.sa_data);
if ((s2=socket(PF_UNIX, SOCK_DGRAM,0)) == -1)
perror("child socket creating error \n");
if (bind(s2, &sock2,sizeof(sock2))==-1)
perror("child binding eror\n");
if ((s1=socket(PF_UNIX, SOCK_DGRAM,0)) == -1)
perror("parent socket creating error \n");
if (bind(s1, &sock1,sizeof(sock1))==-1)
perror("parent binding eror\n");
r1.from=10;
r1.to[0]=9;
if (sendto(s1, &r1, sizeof(struct record),0, &sock2,sizeof(sock2))==-1)
perror("parent send error\n");
if ( fork()==0)
{
printf("child birth\n");
if (recvfrom(s2, (char *) &r2, sizeof(struct record),0,&stemp,&fromlen) == -1)
perror("child receive error\n");
else
{
printf("child got:%d\n",r2.from);
printf("child got:%d\n",r2.to[0]);
}
printf("child o.k\n");
exit(0);
}
printf("parent\n");
if (wait(&ret) ==-1)
perror("wait error \n");
printf("parent o.k\n");
if (close(s1)== -1)
perror("close fail");
if (close(s2)==-1)
perror("close s2 fail");
exit(0);
}
--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Hung-Hsien Chang ( Hubert) E-mail: hubert at cs.ucsb.edu
P.S: Hubert is not my middle name; it is easier for American friends to call me.
More information about the Comp.unix.wizards
mailing list