Пример #1
0
static int anetGenericAccept(char *err, int s, struct sockaddr *sa, socklen_t *len) {
    int fd;
    while(1) {
        fd = accept(s,sa,len);
        if (fd == -1) {
#ifndef _WIN32
            if (errno == EINTR) {
                continue;
#else
            errno = WSAGetLastError();
            if (errno == WSAEWOULDBLOCK) {
#endif
            } else {
                anetSetError(err, "accept: %s", strerror(errno));
            }
        }
        break;
    }
    return fd;
}

int anetTcpAccept(char *err, int s, char *ip, int *port) {
    int fd;
    struct sockaddr_in sa;
    socklen_t salen = sizeof(sa);
    if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR)
        return ANET_ERR;

    if (ip) strcpy(ip,inet_ntoa(sa.sin_addr));
    if (port) *port = ntohs(sa.sin_port);
    return fd;
}
Пример #2
0
int anetTcpAccept(char *err, int s, char *ip, size_t ip_len, int *port)
{
    int fd;
    struct sockaddr_storage sa;
    socklen_t salen = sizeof(sa);
    if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == -1)
    {
        return ANET_ERR;
    }
    if (sa.ss_family == AF_INET)
    {
        struct sockaddr_in *s = (struct sockaddr_in *)&sa;
        if (ip)
        {
            inet_ntop(AF_INET,(void*)&(s->sin_addr),ip,ip_len);
        }
        if (port)
        {
            *port = ntohs(s->sin_port);
        }
    }
    else
    {
        struct sockaddr_in6 *s = (struct sockaddr_in6 *)&sa;
        if (ip)
        {
            inet_ntop(AF_INET6,(void*)&(s->sin6_addr),ip,ip_len);
        }
        if (port)
        {
            *port = ntohs(s->sin6_port);
        }
    }
    return fd;
}
Пример #3
0
int anetUnixAccept(char *err, int s) {
    int fd;
    struct sockaddr_un sa;
    socklen_t salen = sizeof(sa);
    if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR)
        return ANET_ERR;

    return fd;
}
Пример #4
0
int anetTcpAccept(char *err, int s, char *ip, int *port) {
    int fd;
    struct sockaddr_in sa;
    socklen_t salen = sizeof(sa);
    if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR)
        return ANET_ERR;

    if (ip) strcpy(ip,inet_ntoa(sa.sin_addr));
    if (port) *port = ntohs(sa.sin_port);
    return fd;
}
Пример #5
0
int anetTcpAccept(char*err,int s,char*ip,size_t ip_len,int*port)
{
    int fd;
    struct sockaddr_in sa;
    socklen_t salen=sizeof(sa);
    if((fd=anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen))<0)
	return ANET_ERR;

    if(ip) inet_ntop(AF_INET,(void*)&(sa.sin_addr),ip,ip_len);
    if(port)*port=ntohs(sa.sin_port);

    return fd;
}
Пример #6
0
int anetUnixAccept(char *err, int s) {
#ifdef _WIN32
    ANET_NOTUSED(err);
    ANET_NOTUSED(s);
    return ANET_ERR;
#else
    int fd;
    struct sockaddr_un sa;
    socklen_t salen = sizeof(sa);
    if ((fd = anetGenericAccept(err,s,(struct sockaddr*)&sa,&salen)) == ANET_ERR)
        return ANET_ERR;

    return fd;
#endif
}