00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include <unistd.h>
00018 #include <errno.h>
00019 #include <netinet/in.h>
00020 #include <sys/socket.h>
00021
00022 #include "addr.h"
00023 #include "mem.h"
00024 #include "tcp.h"
00025
00026 int tcp_connect(const char *ip, int port)
00027 {
00028 int fd;
00029 struct sockaddr_in inaddr;
00030
00031 if (port < 1)
00032 return errno = EINVAL, -1;
00033
00034 mem_set(&inaddr, 0, sizeof(inaddr));
00035 inaddr.sin_family = AF_INET;
00036 inaddr.sin_port = htons(port);
00037
00038 if (addr_from_str(ip, &inaddr.sin_addr.s_addr, 0) == 0)
00039 return errno = EINVAL, -1;
00040
00041 if ((fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
00042 return -1;
00043
00044 if (connect(fd, (struct sockaddr *) &inaddr, sizeof(struct sockaddr_in)) == -1) {
00045 close(fd);
00046 return -1;
00047 }
00048
00049 return fd;
00050 }