Пример #1
0
/* Performs a bind(2) call based on the provided information. The host is optional
 * (if it is not given, INADDR_ANY is assumed). The port is mandatory.
 */
int netcat_bind(int sock, nc_domain_t domain, const nc_host_t *addr, const nc_port_t *port)
{
  struct sockaddr *my_addr;
  unsigned int my_addr_len;
  int ret;

  prepare_sockaddr(domain, addr, port, &my_addr, &my_addr_len);

  /* bind it to the specified address (can be INADDY_ANY) */
  ret = bind(sock, my_addr, my_addr_len);
  free(my_addr);
  return ret;
}
Пример #2
0
/* Performs a connect(2) call based on the provided information. Host and port
 * are both mandatory.
 */
int netcat_connect(int sock, nc_domain_t domain, const nc_host_t *addr, const nc_port_t *port)
{
  struct sockaddr *rem_addr;
  unsigned int rem_addr_len;
  int ret;

  assert(addr);

  prepare_sockaddr(domain, addr, port, &rem_addr, &rem_addr_len);

  ret = connect(sock, rem_addr, rem_addr_len);
  free(rem_addr);
  return ret;
}
Пример #3
0
Файл: net.cpp Проект: stdk/nsv
int create_connection(uint32_t ip,uint16_t port)
{
    int fd = socket(AF_INET,SOCK_STREAM,0);
    if(fd < 0) {
        xlog2("create_connection[%0X:%i]: socket: %s",ip,port,strerror(errno));
        return -1;
    }

    int flags;
    if (-1 == (flags = fcntl(fd, F_GETFL, 0))) flags = 0;
    fcntl(fd, F_SETFL, flags | O_NONBLOCK);

    sockaddr_in addr = prepare_sockaddr(ip,port);
    int ret = connect(fd,(struct sockaddr*)&addr,sizeof(addr));
    if( ret < 0 && errno != EINPROGRESS) {
        close(fd);
        xlog2("connect[%0X:%i]: %s",ip,port,strerror(errno));
        return -2;
    }

    return fd;
}