[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[openss7] Getting through
Brian,
Thanks for the patch. Things are coming along much better now. I have
one question though, is the recv and send system calls blocking? I have
a test program which seems to show that they are not blocking, and
something else is going wrong. I am a little confused.
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>
#include <errno.h>
int main(void)
{
int listen_sock;
int connect_sock;
int ct = 0;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sockaddr_len = 0;
char buff[1024];
int on = 1;
memset(&server_addr, 0, sizeof(struct sockaddr_in));
memset(&client_addr, 0, sizeof(struct sockaddr_in));
memset(buff, 0, 1024);
/** Create a socket **/
if((listen_sock = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0)
{
perror("Creating Socket");
exit(1);
}
fprintf(stderr, "Created socket with fd of %d\n", listen_sock);
setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(int));
/** Fill address in **/
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(33822);
server_addr.sin_addr.s_addr = inet_addr("192.168.1.33");
/** 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 listen and accept a connection **/
if(listen(listen_sock, 1) < 0)
{
perror("Listening");
exit(3);
}
fprintf(stderr, "After listen\n");
if((connect_sock = accept(listen_sock, (struct sockaddr* ) &client_addr, &sockaddr_len)) < 0)
{
perror("Accepting\n");
exit(4);
}
if(sockaddr_len == sizeof(struct sockaddr_in))
fprintf(stderr, "Client Address is %s\n", inet_ntoa(client_addr.sin_addr));
/** Now read from the socket **/
for(ct = 0; ct < 100; ct++)
{
if(recv(connect_sock, buff, 1024, MSG_WAITALL | MSG_NOSIGNAL) < 0)
{
if(errno == EAGAIN)
ct--;
else
perror("Reading from fd");
}
else
{
fprintf(stderr, "%d) Data received is %s\n", ct, buff);
}
memset(buff, 0, 1024);
}
/** Close the fd **/
close(listen_sock);
close(connect_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>
#include <signal.h>
#include <unistd.h>
#include <errno.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";
memset(&my_addr, 0, sizeof(struct sockaddr_in));
memset(&server_addr, 0, sizeof(struct sockaddr_in));
signal(SIGPIPE, SIG_IGN);
/** Create a socket **/
if((listen_sock = socket(PF_INET, SOCK_SEQPACKET, IPPROTO_SCTP)) < 0)
{
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 **/
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);
/** Write to the socket **/
for(ct = 0; ct < 10; ct++)
{
if(send(listen_sock, buff, sizeof(buff), 0) == EPIPE)
{
signal(SIGPIPE, SIG_IGN);
}
fprintf(stderr, "Sent %s to bert for the %d time\n", buff, ct);
}
/** close **/
close(listen_sock);
exit(0);
}