Ejemplo n.º 1
0
int xconnect(const char *peer) {
    int fd;
    int pf = sockaddr_pf(peer);
    char sockaddr[TP_SOCKADDRLEN] = {};

    if (pf < 0 || sockaddr_addr(peer, sockaddr, sizeof(sockaddr)) != 0) {
	errno = EINVAL;
	return -1;
    }
    if ((fd = xsocket(pf, XCONNECTOR)) < 0)
	return -1;
    if (xbind(fd, sockaddr) < 0) {
	xclose(fd);
	return -1;
    }
    return fd;
}
Ejemplo n.º 2
0
static int
tcp_accept(iodev_t *dev, int fd, struct sockaddr *addr) {
    char paddr[64];
    iodev_notify("accepted connection from %s on fd=%d",
                 inet_ntop(addr->sa_family, sockaddr_addr(addr), paddr, sizeof(paddr)),
                 fd);
    iodev_setstate(dev, IODEV_OPEN);
    dev->fd = fd;
    // set non-blocking
    int opts = fcntl(dev->fd, F_GETFL);
    if (opts < 0)
        iodev_error("fcntl(%d, F_GETFL) error(%d): %s", dev->fd, errno, strerror(errno));
    else {
        opts |= O_NONBLOCK;
        if (fcntl(dev->fd, F_SETFL, opts) < 0)
            iodev_error("fcntl(%d, F_SETFL) error(%d): %s", dev->fd, errno, strerror(errno));
    }

    iodev_setstate(dev, IODEV_CONNECTED);
    return fd;
}