|
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <unistd.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/un.h>
- #include <netinet/in.h>
-
- #include "message.h"
-
- int unix_socket_fd;
-
- struct licks_message message;
-
- struct sockaddr_un localaddr;
- struct sockaddr_un remoteaddr;
- socklen_t remoteaddr_len;
-
- char *ikd_path="/tmp/ikd";
-
- int
- main(int argc, char **argv) {
- int l,i;
-
- // create socket
- unix_socket_fd=socket(PF_LOCAL,SOCK_DGRAM,0);
- if(unix_socket_fd==-1) {
- perror("socket");
- exit(0);
- }
- printf("socket %d\n",unix_socket_fd);
-
-
- // bind to socket, localaddr is the pid
- sprintf(localaddr.sun_path,"/tmp/client%d",getpid());
- localaddr.sun_family=AF_LOCAL;
- // localaddr.sun_len=strlen(localaddr.sun_path)+1;
- if(bind(unix_socket_fd,(struct sockaddr *)&localaddr,sizeof(struct sockaddr_un))) {
- perror("bind");
- exit(0);
- }
- printf("bound\n");
-
-
-
-
-
- message.type=MSG_CHAR_ARRAY;
- for(i=0;i<32;i++) {
- message.char_array[i]=i;
- }
-
- remoteaddr.sun_family=AF_LOCAL;
- // remoteaddr.sun_len=strlen(ikd_path);
- strcpy(remoteaddr.sun_path,ikd_path);
-
- l=sendto(unix_socket_fd,&message,sizeof(message),0,(struct sockaddr *)&remoteaddr,sizeof(struct sockaddr_un));
- printf("sendto: %d\n",l);
- if(l==-1) {
- perror("sendto");
- }
-
- remoteaddr_len=sizeof(struct sockaddr_un);
- l=recvfrom(unix_socket_fd,&message,sizeof(struct licks_message),0,(struct sockaddr *)&remoteaddr,&remoteaddr_len);
- printf("recvfrom: %d\n",l);
- // printf("sun_len: %d\n",remoteaddr.sun_len);
- printf("sun_addr: %s\n",remoteaddr.sun_path);
- printf("message type: %d\n",message.type);
- for(i=0;i<32;i++) {
- if(!(i%8)) { printf("\n"); }
- printf("%02x ",message.char_array[i]);
- }
-
- printf("\n");
- close(unix_socket_fd);
- unlink(localaddr.sun_path);
- return 0;
- }
|