blob: a7bd06eb5bc8b70ebcbfd4ab577fb2367dd9fa4d [file] [log] [blame]
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <sys/sockio.h>
int
main(int argc, char **argv)
{
int sockfd,i,t;
struct linger ling;
char *host=NULL;
unsigned short port=0;
struct sockaddr_in servaddr;
int tcp=1;
int sctp=0;
while((i= getopt(argc,argv,"h:p:st")) != EOF){
switch(i) {
case 'h':
host = optarg;
break;
case 'p':
t = strtol(optarg,NULL,0);
port = (unsigned short)t;
break;
case 's':
#ifdef IPPROTO_SCTP
sctp = 1;
tcp = 0;
#endif
break;
case 't':
tcp = 1;
sctp = 0;
break;
case '?':
out_use:
printf("Use - %s -h host -p port [-s | -t]\n",
argv[0]);
return(-1);
};
};
if((host == NULL) || (port == 0)) {
goto out_use;
}
#ifdef IPPROTO_SCTP
if(sctp) {
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_SCTP);
} else {
#endif
sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
#ifdef IPPROTO_SCTP
}
#endif
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(port);
if((i = inet_pton(AF_INET, host, &servaddr.sin_addr)) != 1) {
printf("sorry address not translated (%d)\n",i);
return(-1);
}
i = connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr));
if(i) {
printf("Sorry connect failed err:%d\n",errno);
return(-1);
}
ling.l_onoff = 1;
ling.l_linger = 0;
i = setsockopt(sockfd, SOL_SOCKET, SO_LINGER, &ling, sizeof(ling));
if(i == -1) {
printf("Sorry can't set so_linger err:%d\n",errno);
} else {
printf("Set for reset/abort\n");
}
exit(0);
}