I'm trying to setup a connection between a client and a server using sockets.
I'm doing:
test.h:
---------
Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#define MYSOCKET "/tmp/mysocket"
#define LISENQ 20
void error(char *msg)
{
perror(msg);
exit(1);
}
server.c:
----------
Code:
#include "test.h"
int main()
{
struct sockaddr serveraddr, clientaddr;
int sd, sd_new;
socklen_t serverlen, clientlen;
char buf[256];
sd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sd < 0)
error("server socket failure");
bzero(&serveraddr, sizeof(serveraddr));
bzero(&clientaddr, sizeof(clientaddr));
serveraddr.sa_family = AF_UNIX;
strcpy(serveraddr.sa_data, MYSOCKET);
serverlen = sizeof(serveraddr.sa_family) + strlen(serveraddr.sa_data);
clientlen = sizeof(clientaddr.sa_family) + strlen(clientaddr.sa_data);
unlink(MYSOCKET);
if (bind(sd, (struct sockaddr *)&serveraddr, serverlen) < 0)
error("server bind failure");
if (listen(sd, LISENQ) < 0)
error("server listen failure");
for(;;)
{
sd_new = accept(sd, (struct sockaddr *)&clientaddr, &clientlen);
if (sd_new < 0)
error("server accept failure");
if (fork() == 0)
{
read(sd_new, buf, sizeof(buf));
printf("Got msg: %s", buf);
close(sd_new);
exit(0);
}
close (sd);
}
return 0;
}
client:
-------
Code:
#include "test.h"
int main()
{
struct sockaddr serveraddr;
int sd;
socklen_t serverlen;
char buf[256];
sd = socket(AF_UNIX, SOCK_STREAM, 0);
if (sd < 0)
error("client socket failure");
serveraddr.sa_family = AF_UNIX;
strcpy(serveraddr.sa_data, MYSOCKET);
serverlen = sizeof(serveraddr.sa_family) + strlen(serveraddr.sa_data);
if (connect(sd, (struct sockaddr *)&serveraddr, serverlen) < 0);
error("client connect failure");
puts("client connected!");
while(1)
{
printf(">> ");
scanf("%s", &buf);
write(sd, buf, sizeof(buf));
}
close(sd);
return 0;
}
- server runs and waits
- client runs and stops with message : client connect failure: Success
and crashes the server with msg: Got msg: �Ҋ�server accept failure: Bad file descriptor
need some advice please