Пример #1
0
static PyObject *
UDP_func_getsockname(UDP *self)
{
    int r, namelen;
    char ip[INET6_ADDRSTRLEN];
    struct sockaddr sockname;
    struct sockaddr_in *addr4;
    struct sockaddr_in6 *addr6;

    namelen = sizeof(sockname);

    RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL);
    RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL);

    r = uv_udp_getsockname((uv_udp_t *)UV_HANDLE(self), &sockname, &namelen);
    if (r != 0) {
        RAISE_UV_EXCEPTION(UV_HANDLE_LOOP(self), PyExc_UDPError);
        return NULL;
    }

    if (sockname.sa_family == AF_INET) {
        addr4 = (struct sockaddr_in*)&sockname;
        uv_ip4_name(addr4, ip, INET_ADDRSTRLEN);
        return Py_BuildValue("si", ip, ntohs(addr4->sin_port));
    } else if (sockname.sa_family == AF_INET6) {
        addr6 = (struct sockaddr_in6*)&sockname;
        uv_ip6_name(addr6, ip, INET6_ADDRSTRLEN);
        return Py_BuildValue("si", ip, ntohs(addr6->sin6_port));
    } else {
        PyErr_SetString(PyExc_UDPError, "unknown address type detected");
        return NULL;
    }
}
Пример #2
0
static void udp_recv(uv_udp_t* handle,
                     ssize_t nread,
                     uv_buf_t buf,
                     struct sockaddr* addr,
                     unsigned flags) {
  struct sockaddr sockname;
  int namelen;
  int r;

  ASSERT(nread >= 0);

  if (nread == 0) {
    free(buf.base);
    return;
  }

  memset(&sockname, -1, sizeof sockname);
  namelen = sizeof(sockname);
  r = uv_udp_getsockname(&udp, &sockname, &namelen);
  ASSERT(r == 0);
  check_sockname(&sockname, "0.0.0.0", 0, "udp receiving socket");
  getsocknamecount++;

  uv_close((uv_handle_t*) &udp, NULL);
  uv_close((uv_handle_t*) handle, NULL);
}
Пример #3
0
static int udp_listener() {
  struct sockaddr_in addr = uv_ip4_addr("0.0.0.0", server_port);
  struct sockaddr sockname;
  int namelen;
  int r;

  r = uv_udp_init(loop, &udpServer);
  if (r) {
    fprintf(stderr, "Socket creation error\n");
    return 1;
  }

  r = uv_udp_bind(&udpServer, addr, 0);
  if (r) {
    fprintf(stderr, "Bind error\n");
    return 1;
  }

  memset(&sockname, -1, sizeof sockname);
  namelen = sizeof sockname;
  r = uv_udp_getsockname(&udpServer, &sockname, &namelen);
  ASSERT(r == 0);
  check_sockname(&sockname, "0.0.0.0", server_port, "udp listener socket");
  getsocknamecount++;

  r = uv_udp_recv_start(&udpServer, alloc, udp_recv);
  ASSERT(r == 0);

  return 0;
}
Пример #4
0
int luv_udp_getsockname(lua_State* L) {
  uv_udp_t* handle = (uv_udp_t*)luv_checkudata(L, 1, "udp");
  int family;
  int port = 0;
  char ip[INET6_ADDRSTRLEN];

  struct sockaddr_storage address;
  int addrlen = sizeof(address);

  if (uv_udp_getsockname(handle, (struct sockaddr*)(&address), &addrlen)) {
    uv_err_t err = uv_last_error(luv_get_loop(L));
    return luaL_error(L, "udp_getsockname: %s", uv_strerror(err));
  }

  family = address.ss_family;
  if (family == AF_INET) {
    struct sockaddr_in* addrin = (struct sockaddr_in*)&address;
    uv_inet_ntop(AF_INET, &(addrin->sin_addr), ip, INET6_ADDRSTRLEN);
    port = ntohs(addrin->sin_port);
  } else if (family == AF_INET6) {
    struct sockaddr_in6* addrin6 = (struct sockaddr_in6*)&address;
    uv_inet_ntop(AF_INET6, &(addrin6->sin6_addr), ip, INET6_ADDRSTRLEN);
    port = ntohs(addrin6->sin6_port);
  }

  lua_newtable(L);
  lua_pushnumber(L, port);
  lua_setfield(L, -2, "port");
  lua_pushnumber(L, family);
  lua_setfield(L, -2, "family");
  lua_pushstring(L, ip);
  lua_setfield(L, -2, "address");

  return 1;
}
Пример #5
0
extern "C" int
rust_uv_udp_getsockname
(uv_udp_t* handle, sockaddr_storage* name) {
    // sockaddr_storage is big enough to hold either
    // sockaddr_in or sockaddr_in6
    int namelen = sizeof(sockaddr_storage);
    return uv_udp_getsockname(handle, (sockaddr*)name, &namelen);
}
Пример #6
0
Файл: udp.c Проект: luvit/luv
static int luv_udp_getsockname(lua_State* L) {
    uv_udp_t* handle = luv_check_udp(L, 1);
    struct sockaddr_storage address;
    int addrlen = sizeof(address);
    int ret = uv_udp_getsockname(handle, (struct sockaddr*)&address, &addrlen);
    if (ret < 0) return luv_error(L, ret);
    parse_sockaddr(L, &address, addrlen);
    return 1;
}
Пример #7
0
static int lluv_udp_getsockname(lua_State *L){
  lluv_handle_t *handle = lluv_check_udp(L, 1, LLUV_FLAG_OPEN);
  struct sockaddr_storage sa; int sa_len = sizeof(sa);
  int err = uv_udp_getsockname(LLUV_H(handle, uv_udp_t), (struct sockaddr*)&sa, &sa_len);

  lua_settop(L, 1);
  if(err < 0){
    return lluv_fail(L, handle->flags, LLUV_ERR_UV, err, NULL);
  }
  return lluv_push_addr(L, &sa);
}
Пример #8
0
int uv_getsockname(uv_handle_t* handle, struct sockaddr* name, int* namelen) {
  switch (handle->type) {
    case UV_TCP:
      return uv_tcp_getsockname((uv_tcp_t*) handle, name, namelen);

    case UV_UDP:
      return uv_udp_getsockname((uv_udp_t*) handle, name, namelen);

    default:
      uv_set_sys_error(WSAENOTSOCK);
      return -1;
  }
}
Пример #9
0
net::Address UDPSocket::address() const
{    
    if (!active())
        return net::Address();
        //throw std::runtime_error("Invalid UDP socket: No address");
    
    struct sockaddr address;
    int addrlen = sizeof(address);
    int r = uv_udp_getsockname(ptr<uv_udp_t>(), &address, &addrlen);
    if (r)
        return net::Address();
        //throwLastError("Invalid UDP socket: No address");

    return Address(&address, addrlen);
}
Пример #10
0
/*
 * Class:     com_oracle_libuv_handles_UDPHandle
 * Method:    _address
 * Signature: (J)Lcom/oracle/libuv/Address;
 */
JNIEXPORT jobject JNICALL Java_com_oracle_libuv_handles_UDPHandle__1address
  (JNIEnv *env, jobject that, jlong udp) {

  assert(udp);
  uv_udp_t* handle = reinterpret_cast<uv_udp_t*>(udp);
  struct sockaddr_storage address;
  sockaddr* sock = reinterpret_cast<sockaddr*>(&address);
  int addrlen = sizeof(address);
  int r = uv_udp_getsockname(handle, sock, &addrlen);
  if (r) {
    ThrowException(env, handle->loop, "uv_udp_getsockname");
    return NULL;
  }
  const sockaddr* addr = reinterpret_cast<const sockaddr*>(&address);
  return StreamCallbacks::_address_to_js(env, addr);
}
Пример #11
0
    static int64_t HHVM_METHOD(UVUdp, getSockport) {
        auto* data = Native::data<UVUdpData>(this_);
        struct sockaddr addr;
        int addrlen;

        if(data->udp_handle->sockPort == 0){
            addrlen = sizeof addr;
            if(uv_udp_getsockname(data->udp_handle, &addr, &addrlen)){
                return -1;
            }
            data->udp_handle->sockAddr = sock_addr(&addr);
            data->udp_handle->sockPort = sock_port(&addr);
        }
        
        return data->udp_handle->sockPort;
    }    
Пример #12
0
Файл: udp.c Проект: imclab/pyuv
static PyObject *
UDP_func_getsockname(UDP *self)
{
    int err, namelen;
    struct sockaddr_storage sockname;

    RAISE_IF_HANDLE_NOT_INITIALIZED(self, NULL);
    RAISE_IF_HANDLE_CLOSED(self, PyExc_HandleClosedError, NULL);

    namelen = sizeof(sockname);

    err = uv_udp_getsockname(&self->udp_h, (struct sockaddr *)&sockname, &namelen);
    if (err < 0) {
        RAISE_UV_EXCEPTION(err, PyExc_UDPError);
        return NULL;
    }

    return makesockaddr((struct sockaddr *)&sockname, namelen);
}
Пример #13
0
 int  UvUdpSocket::getSockname(struct sockaddr_in* name)
 {
	 int size = sizeof sockaddr_in;
	 return uv_udp_getsockname(m_uv_udp, (sockaddr*)name, &size);
 }