Beispiel #1
0
void uv__tcp_io(EV_P_ ev_io* watcher, int revents) {
  uv_tcp_t* tcp = watcher->data;

  assert(tcp->type == UV_TCP);
  assert(watcher == &tcp->read_watcher ||
         watcher == &tcp->write_watcher);
  assert(tcp->fd >= 0);
  assert(!uv_flag_is_set((uv_handle_t*)tcp, UV_CLOSING));

  if (tcp->connect_req) {
    uv__tcp_connect(tcp);
  } else {
    if (revents & EV_READ) {
      uv__read(tcp);
    }

    if (revents & EV_WRITE) {
      uv_write_t* req = uv__write(tcp);
      if (req) {
        /* Error. Notify the user. */
        if (req->cb) {
          req->cb(req, -1);
        }
      } else {
        uv__write_callbacks(tcp);
      }
    }
  }
}
Beispiel #2
0
int uv_tcp_connect(uv_connect_t* req,
                   uv_tcp_t* handle,
                   struct sockaddr_in address,
                   uv_connect_cb cb) {
  if (handle->type != UV_TCP || address.sin_family != AF_INET)
    return UV_EINVAL;
  else
    return uv__tcp_connect(req, handle, address, cb);
}
Beispiel #3
0
int uv_tcp_connect(uv_connect_t* req,
                   uv_tcp_t* handle,
                   struct sockaddr_in address,
                   uv_connect_cb cb) {
  if (handle->type != UV_TCP || address.sin_family != AF_INET) {
    uv__set_artificial_error(handle->loop, UV_EINVAL);
    return -1;
  }

  return uv__tcp_connect(req, handle, address, cb);
}
Beispiel #4
0
int uv_tcp_connect6(uv_connect_t* req,
                    uv_tcp_t* handle,
                    const struct sockaddr_in6* addr,
                    uv_connect_cb cb) {
  if (handle->type == UV_TCP && addr->sin6_family == AF_INET6) {
    return uv__tcp_connect(req,
                           handle,
                           (const struct sockaddr*) addr,
                           sizeof(*addr),
                           cb);
  }
  return UV_EINVAL;
}
Beispiel #5
0
int uv_tcp_connect(uv_connect_t* req,
                   uv_tcp_t* handle,
                   const struct sockaddr* addr,
                   uv_connect_cb cb) {
  unsigned int addrlen;

  if (handle->type != UV_TCP)
    return UV_EINVAL;

  if (addr->sa_family == AF_INET)
    addrlen = sizeof(struct sockaddr_in);
  else if (addr->sa_family == AF_INET6)
    addrlen = sizeof(struct sockaddr_in6);
  else
    return UV_EINVAL;

  return uv__tcp_connect(req, handle, addr, addrlen, cb);
}
Beispiel #6
0
void uv__tcp_io(EV_P_ ev_io* watcher, int revents) {
    uv_handle_t* handle = watcher->data;
    assert(watcher == &handle->read_watcher ||
           watcher == &handle->write_watcher);

    assert(handle->fd >= 0);

    assert(!uv_flag_is_set(handle, UV_CLOSING));

    if (handle->connect_req) {
        uv__tcp_connect(handle);
    } else {
        if (revents & EV_READ) {
            uv__read(handle);
        }

        if (revents & EV_WRITE) {
            uv__write(handle);
        }
    }
}