예제 #1
0
파일: u_network.c 프로젝트: Kalamatee/mesa
int
u_socket_listen_on_port(uint16_t portnum)
{
#if defined(PIPE_HAVE_SOCKETS)
   int s;
   struct sockaddr_in sa;
   memset(&sa, 0, sizeof(struct sockaddr_in));

   sa.sin_family = AF_INET;
   sa.sin_port = htons(portnum);

   s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if (s < 0)
      return -1;

   if (bind(s, (struct sockaddr *)&sa, sizeof(struct sockaddr_in)) == -1) {
      u_socket_close(s);
      return -1;
   }

   listen(s, 0);

   return s;
#else
   assert(0);
   return -1;
#endif
}
예제 #2
0
파일: u_network.c 프로젝트: Kalamatee/mesa
int
u_socket_connect(const char *hostname, uint16_t port)
{
#if defined(PIPE_HAVE_SOCKETS)
   int s;
   struct sockaddr_in sa;
   struct hostent *host = NULL;

   memset(&sa, 0, sizeof(struct sockaddr_in));
   host = gethostbyname(hostname);
   if (!host)
      return -1;

   memcpy((char *)&sa.sin_addr,host->h_addr_list[0],host->h_length);
   sa.sin_family= host->h_addrtype;
   sa.sin_port = htons(port);

   s = socket(host->h_addrtype, SOCK_STREAM, IPPROTO_TCP);
   if (s < 0)
      return -1;

   if (connect(s, (struct sockaddr *)&sa, sizeof(sa))) {
      u_socket_close(s);
      return -1;
   }

   return s;
#else
   assert(0);
   return -1;
#endif
}
예제 #3
0
파일: u_network.c 프로젝트: chemecse/mesa
int
u_socket_connect(const char *hostname, uint16_t port)
{
#if defined(PIPE_HAVE_SOCKETS)
   int s, r;
   struct addrinfo hints, *addr;
   char portString[20];

   memset(&hints, 0, sizeof hints);
   hints.ai_family = AF_UNSPEC; // AF_INET or AF_INET6 to force version
   hints.ai_socktype = SOCK_STREAM;

   util_snprintf(portString, sizeof(portString), "%d", port);

   r = getaddrinfo(hostname, portString, NULL, &addr);
   if (r != 0) {
      return -1;
   }

   s = socket(addr->ai_family, SOCK_STREAM, IPPROTO_TCP);
   if (s < 0) {
      freeaddrinfo(addr);
      return -1;
   }

   if (connect(s, addr->ai_addr, (int) addr->ai_addrlen)) {
      u_socket_close(s);
      freeaddrinfo(addr);
      return -1;
   }

   freeaddrinfo(addr);

   return s;
#else
   assert(0);
   return -1;
#endif
}
예제 #4
0
/**
 * Free a connection, also closes socket.
 */
void
rbug_disconnect(struct rbug_connection *c)
{
   u_socket_close(c->socket);
   FREE(c);
}