[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);
}