#include #include #include #include #include #include #include #include #include #include #include "defs.inc" #ifdef USE_SOCK_STREAM #define type SOCK_STREAM #else #define type SOCK_DGRAM #endif /* FIXME: Support AF_INET */ #ifdef USE_AF_UNIX #define domain AF_UNIX #else #define domain AF_INET #endif #define SOCKET_NAME "test_socket" #define DATA "Testing, testing, ..." int write_socket(const char* socket_name) { int err = 0, socket_fd, write_size; #ifdef USE_AF_UNIX struct sockaddr_un server; int c = sizeof(struct sockaddr_un); #else struct sockaddr_in server; int c = sizeof(struct sockaddr_in); #endif /* Create socket */ socket_fd = socket (domain, type, 0); if (socket_fd == -1) { perror("test_socket_client:write_socket(): socket()"); return -1; } #ifdef USE_AF_UNIX server.sun_family = domain; strncpy (server.sun_path, socket_name, sizeof(server.sun_path)); #else server.sin_family = domain; server.sin_addr.s_addr = inet_addr("127.0.0.1"); server.sin_port = htons( 8888 ); #endif /* Connect to socket_fd */ err = connect (socket_fd, (struct sockaddr *)&server, c); printf("test_socket_client:write_socket(): connect(): err = '%s'\n", strerror(errno)); if (err) { close(socket_fd); #ifdef EDESTADDRREQ if (errno == EDESTADDRREQ) errno = ECONNREFUSED; #endif perror("test_socket_client:write_socket(): connect()"); return err; } #if 0 write_size = write (socket_fd, DATA, sizeof(DATA)); printf("test_socket_client:write_socket(): write(): err = '%s'\n", strerror(errno)); #else write_size = send (socket_fd, DATA, sizeof(DATA), 0); printf("test_socket_client:write_socket(): send() err = '%s'\n", strerror(errno)); #endif if (write_size == -1) { #ifdef USE_SOCK_STREAM perror("test_socket_client:write_socket(): write(): Sending on stream socket"); #else perror("test_socket_client:write_socket(): write(): Sending on datagram socket"); #endif close(socket_fd); return err; } close(socket_fd); return err; } int main(void) { const char* socket_name = SOCKET_NAME; int err = 0; printf ("test_socket_client:main(): Domain = %s, Type = %s\n", (domain == AF_UNIX) ? "AF_UNIX": "AF_INET", (type == SOCK_STREAM) ? "SOCK_STREAM": "SOCK_DGRAM"); printf("test_socket_client:main(): socket_name = '%s'\n", socket_name); err = write_socket(socket_name); if (err) { /* Redundant */ //printf("test_socket_client:main(): write_socket() err = '%s'\n", strerror(errno)); #ifdef USE_SOCK_STREAM perror("test_socket_client:main(): write_socket() SOCK_STREAM"); #else perror("test_socket_client:main(): write_socket() SOCK_DGRAM"); #endif } return errno; }