Novell Home

BSD client CLIB application

From Developer Community

Basic socket/connect/write/read/close sample using BSD sockets from CLIB.

Sample Code

/* Basic BSD client App */

/*
 * ANSI 
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/*
 * BSD specific
 */
#include <netinet/in.h> /* sockaddr_in, */
#include <unistd.h> /* close, write, read */
#include <sys/socket.h> /* most bsd calls */
#include <arpa/inet.h> /* inet_addr */

#define INVALID_SOCKET (-1)
/*
 * main
 */

extern unsigned short htons();

int main(int argc, char **argv)
{
	char *buff;
	struct sockaddr_in serverAddr;
	int serverSocket = INVALID_SOCKET;
	buff = NULL;

	if( argc != 3){
		printf("Usage: %s IPaddr port", argv[0]);
		goto END_ERR;
	}

	serverAddr.sin_addr.s_addr = inet_addr(argv[1]);
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(atoi(argv[2]));

/*
 * open a socket
 */
	printf("\r\nCreating the Socket\r\n");
	if( ( serverSocket = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET){
		perror("socket()");
		goto END_ERR;
	}

/*
 * connect the socket
 */
	printf("\r\nConnecting the Socket\r\n");
	if( ( connect(serverSocket, 
				(struct sockaddr *)&serverAddr, sizeof(serverAddr))) == -1){
		perror("connect()");
		goto END_ERR;
	}
	
	printf("\r\nAllocating buffer\r\n");
	if( (buff = (char *)malloc(100000)) == NULL){
		printf("problem with malloc");
		goto END_ERR;
	}
	memset(buff, '\0', sizeof(buff));
	memcpy(buff, "abcdefghijklmnopqrstuvwxyz", (sizeof(buff) - 1));
	
	printf("\r\nSending Buffer %s\r\n", buff);

	if( (write(serverSocket, buff, sizeof(buff))) == -1){
		perror("write()");
		goto END_ERR;
	}

	printf("\r\nRecieving Buffer\r\n");
	if( (read(serverSocket, buff, sizeof(buff))) == -1){
		perror("read()");
		goto END_ERR;
	}

	printf(buff);	
	printf("\r\n\r\nthat was some buffer\r\n");

END_ERR:
	if (serverSocket != INVALID_SOCKET)
		close(serverSocket);
	if( buff != NULL)
		free(buff);
	return 0;

}

--Benjamin Fjeldsted

Novell® Making IT Work As One

© 2008 Novell, Inc. All Rights Reserved.