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); } } } }
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); }
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); }
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; }
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); }
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); } } }