[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[openss7] Still having problems



Brian,
	I have tried and tried, but I cannot get this to work.  I am enclosing
a sample program which just tries to write "Hello World" to the other
machine.  The read program blocks under udp, but under sctp, it just
gets and error when we are not connected.  Am I missing something here? 
If you could, maybe you could take a look at this and give me some
advice.  

Thanks,
Chuck
--
Chuck Winters                            | Email:  cwinters@atl.lmco.com
Distributed Processing Laboratory        | Phone:  856-338-3987
Lockheed Martin Advanced Technology Labs |
1 Federal St - A&E-3W                    |
Camden, NJ 08102                         |
#include <sys/socket.h>
#include <sys/types.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/uio.h>

int main(void)
{
	int listen_sock;
	int ct = 0;
	struct sockaddr_in server_addr;
	struct sockaddr_in client_addr;
	int sockaddr_len = 0;
	char buff[1024];
#ifdef RECVMSG
	struct msghdr hdr;
	struct iovec  iov;
	int flags = 0;

	memset(&hdr, 0, sizeof(struct msghdr));
	memset(&iov, 0, sizeof(struct iovec));
#endif

	memset(&server_addr, 0, sizeof(struct sockaddr_in));
	memset(&client_addr, 0, sizeof(struct sockaddr_in));
	memset(buff, 0, 1024);

	/** Create a socket **/
#ifdef UDP_SOCKETS
	if((listen_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
#else
	if((listen_sock = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0)
#endif
	{
		perror("Creating Socket");
		exit(1);
	}
	fprintf(stderr, "Created socket with fd of %d\n", listen_sock);

	/** Fill address in **/
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(33822);
#ifdef ANY
	server_addr.sin_addr.s_addr = INADDR_ANY;
#else
	server_addr.sin_addr.s_addr = inet_addr("192.168.1.33");
#endif

	/** Bind address to the socket **/
	if(bind(listen_sock, (struct sockaddr* ) &server_addr, sizeof(struct sockaddr_in)) < 0)
	{
		perror("Binding to socket");
		exit(2);
	}

	/** Now read from the socket **/
	for(ct = 0; ct < 100; ct++)
	{
#ifdef RECVMSG
		while(1)
		{
			if(recvmsg(listen_sock, &hdr, flags) >= 0)
				break;
		}
		if(recvmsg(listen_sock, &hdr, flags) < 0)
#else
		if(recvfrom(listen_sock, buff, 1024, 0, (struct sockaddr* ) &client_addr, &sockaddr_len) < 0)
#endif
		{
			perror("Reading from fd");
			ct = 0;
		}
#ifdef RECVMSG
		memcpy(&client_addr, hdr.msg_name, sizeof(struct sockaddr_in));
		memcpy(buff, hdr.msg_iov->iov_base, hdr.msg_iov->iov_len);
#else
		fprintf(stderr, "Client address is %s\n", inet_ntoa(client_addr.sin_addr));
		fprintf(stderr, "Data received is  %s\n", buff);
#endif
		memset(&client_addr, 0, sizeof(struct sockaddr_in));
		memset(buff, 0, 1024);
	}

	/** Close the fd **/
	close(listen_sock);
	exit(0);
}
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/uio.h>

int main(void)
{
	int listen_sock;
	int ct = 0;
	struct sockaddr_in server_addr;
	struct sockaddr_in my_addr;
	char buff[12] = "Hello World";
#ifdef RECVMSG
	struct msghdr hdr;
	struct iovec  iov;
	int flag = 0;

	memset(&hdr, 0, sizeof(struct msghdr));
	memset(&iov, 0, sizeof(struct iovec));
#endif

	memset(&my_addr, 0, sizeof(struct sockaddr_in));
	memset(&server_addr, 0, sizeof(struct sockaddr_in));

	/** Create a socket **/
#ifdef UDP_SOCKETS 
	if((listen_sock = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP)) < 0)
#else
	if((listen_sock = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0)
#endif
	{
		perror("Creating Socket");
		exit(1);
	}
	fprintf(stderr, "Created socket with fd of %d\n", listen_sock);

	/** Fill in addr **/
	server_addr.sin_family = AF_INET;
	server_addr.sin_port = htons(33822);
	server_addr.sin_addr.s_addr = inet_addr("192.168.1.33");
	
	my_addr.sin_family = AF_INET;
	my_addr.sin_port = htons(1024);
	my_addr.sin_addr.s_addr = inet_addr("192.168.1.34");

	/*if(bind(listen_sock, (struct sockaddr* ) &my_addr, sizeof(struct sockaddr_in)) < 0)
	{
		perror("Binding");
		exit(1);
	}
	fprintf(stderr, "Bound to my_addr to socket %d\n", listen_sock);*/

	/** Connect to the Server **/
#ifdef RECVMSG
	iov.iov_base = buff;
	iov.iov_len = 12;
	hdr.msg_name = &server_addr;
	hdr.msg_namelen = sizeof(struct sockaddr_in);
	hdr.msg_iov = &iov;
	hdr.msg_iovlen = 1;
#else
/*	if(connect(listen_sock, (struct sockaddr* ) &server_addr, sizeof(struct sockaddr_in)) < 0)
	{
		perror("Connecting");
		exit(2);
	}
	fprintf(stderr, "Connected to socket %d\n", listen_sock);*/
#endif

	/** Write to the socket **/
	for(ct = 0; ct < 100; ct++)
	{
#ifdef RECVMSG
		if(sendmsg(listen_sock, &hdr, flag) < 0)
#else
		if(sendto(listen_sock, buff, 12, 0, (struct sockaddr* ) &server_addr, sizeof(struct sockaddr_in)) < 0)
#endif
		{
			perror("Sending Data");
		}
		fprintf(stderr, "Sent %s to bert\n", buff);
	}

	/** close **/
	close(listen_sock);
	exit(0);
}