예제 #1
0
void Tcp::setup_client_bind()
{
    struct in_addr addr;
    inet_pton(socket_family(), "127.0.0.1", &addr);

    bzero(&client_sock_in, sizeof(client_sock_in));
    client_sock_in.sin_family = socket_family();
    client_sock_in.sin_addr = addr;

    client_addr = (struct sockaddr *) &client_sock_in;
    client_addr_size = sizeof(client_sock_in);
}
예제 #2
0
void Socket::perform_socket()
{
    int optval = 1;

    /* attempt to get socket */
    if ((sockfd = socket(socket_family(), socket_type(), 0)) < 0)
        perror("socket fail");

    /* set SO_REUSEADDR for quick restarts */
    if (socket_family() == AF_INET || socket_family() == AF_INET6)
        setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
}
예제 #3
0
void Socket::perform_client_socket()
{
    /* attempt to get socket */
    if ((sockfd = socket(socket_family(), socket_type(), 0)) < 0) {
        perror("socket fail");
    }
}
예제 #4
0
void Tcp::setup_bind()
{
    /* setup bind parameters */
    bzero(&sock_in, sizeof(sock_in));
    sock_in.sin_family = socket_family();
    sock_in.sin_addr.s_addr = htonl(INADDR_ANY);
    sock_in.sin_port = htons(get_port());

    server_addr = (struct sockaddr *) &sock_in;
    server_addr_size = sizeof(sock_in);
}
예제 #5
0
static mrb_value
mrb_basicsocket_getsockopt(mrb_state *mrb, mrb_value self)
{ 
  char opt[8];
  int s;
  mrb_int family, level, optname;
  mrb_value c, data;
  socklen_t optlen;

  mrb_get_args(mrb, "ii", &level, &optname);
  s = socket_fd(mrb, self);
  optlen = sizeof(opt);
  if (getsockopt(s, level, optname, opt, &optlen) == -1)
    mrb_sys_fail(mrb, "getsockopt");
  c = mrb_const_get(mrb, mrb_obj_value(mrb_class_get(mrb, "Socket")), mrb_intern_lit(mrb, "Option"));
  family = socket_family(s);
  data = mrb_str_new(mrb, opt, optlen);
  return mrb_funcall(mrb, c, "new", 4, mrb_fixnum_value(family), mrb_fixnum_value(level), mrb_fixnum_value(optname), data);
}