Example #1
0
int anetUnixServer(char *err, char *path) {
    int s;
    struct sockaddr_un sa;

    if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR)
        return ANET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sun_family = AF_LOCAL;
    strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1);
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR)
        return ANET_ERR;
    return s;
}
Example #2
0
int anetTcpServer(char *err, int port, char *bindaddr)
{
    int s;
    int y = 1;
    int n = 0;

    struct sockaddr_in sa;

    if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR)
        return ANET_ERR;

    /* Override for SO_REUSEADDR for windows server socks */
    if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &n, sizeof(n)) == SOCKET_ERROR) {
        errno = WSAGetLastError();
        anetSetError(err, "setsockopt SO_REUSEADDR: %d\n", errno);
        return ANET_ERR;
    }

    if (setsockopt(s, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
                   (char *) &y, sizeof(y)) == SOCKET_ERROR) {
        errno = WSAGetLastError();
        anetSetError(err, "setsockopt SO_EXCLUSIVEADDRUSE: %d\n", errno);
        return ANET_ERR;
    }

    memset(&sa,0,sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bindaddr) {
        unsigned long inAddress;

        inAddress = inet_addr(bindaddr);
        if (inAddress == INADDR_NONE || inAddress == INADDR_ANY) {
            anetSetError(err, "Invalid bind address\n");
            aeWinSocketDetach(s, 0);
            closesocket((SOCKET)s);
            return ANET_ERR;
        }
        else {
            sa.sin_addr.s_addr = inAddress;
        };
    }
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR)
        return ANET_ERR;
    return s;
}
Example #3
0
int anetUnixServer(char *err, char *path, mode_t perm, int backlog)
{
    int s;
    struct sockaddr_un sa;
    //创建socket连接
    if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR)
        return ANET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sun_family = AF_LOCAL;
    strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1);
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa),backlog) == ANET_ERR)
        return ANET_ERR;
    if (perm)
        chmod(sa.sun_path, perm);
    return s;
}
Example #4
0
int kr_net_unix_server(char *err, char *path, int perm)
{
    int s;
    struct sockaddr_un sa;

    if ((s = anetCreateSocket(err,AF_LOCAL)) == KR_NET_ERR)
        return KR_NET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sun_family = AF_LOCAL;
    strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1);
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == KR_NET_ERR)
        return KR_NET_ERR;
    if (perm)
        chmod(sa.sun_path, (mode_t)perm);
    return s;
}
Example #5
0
static int _anetTcpServer(char *err, int port, char *bindaddr, int af, int backlog)
{
    int s, rv;
    char _port[6];  /* strlen("65535") */
    struct addrinfo hints, *servinfo, *p;
    snprintf(_port,6,"%d",port);
    memset(&hints,0,sizeof(hints));
    hints.ai_family = af;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_PASSIVE;    /* No effect if bindaddr != NULL */
    if ((rv = getaddrinfo(bindaddr,_port,&hints,&servinfo)) != 0)
    {
        anetSetError(err, "%s", gai_strerror(rv));
        return ANET_ERR;
    }
    for (p = servinfo; p != NULL; p = p->ai_next)
    {
        if ((s = socket(p->ai_family,p->ai_socktype,p->ai_protocol)) == -1)
        {
            continue;
        }
        if (af == AF_INET6 && anetV6Only(err,s) == ANET_ERR)
        {
            goto error;
        }
        if (anetSetReuseAddr(err,s) == ANET_ERR)
        {
            goto error;
        }
        if (anetListen(err,s,p->ai_addr,p->ai_addrlen,backlog) == ANET_ERR)
        {
            goto error;
        }
        goto end;
    }
    if (p == NULL)
    {
        anetSetError(err, "unable to bind socket");
        goto error;
    }
error:
    s = ANET_ERR;
end:
    freeaddrinfo(servinfo);
    return s;
}
Example #6
0
int anetTcpServer(char*err,int port,char*bindaddr,int backlog)
{
    int s;
    if((s=socket(AF_INET,SOCK_STREAM,0))<0){
	anetSetError(err,"create socket:%s",strerror(errno));
	return ANET_ERR;
    }
    if(anetSetReuseAddr(err,s)<0){
	return ANET_ERR;
    }

    struct sockaddr_in server;
    server.sin_family=AF_INET;
    server.sin_port=htons(port);
    server.sin_addr.s_addr=inet_addr(bindaddr);
    if(anetListen(err,s,(struct sockaddr*)&server,sizeof(server),backlog)<0){
	return ANET_ERR;
    }
    return s;
}
Example #7
0
int anetTcpServer(char *err, int port, char *bindaddr)
{
    int s;
    struct sockaddr_in sa;

    if ((s = anetCreateSocket(err,AF_INET)) == ANET_ERR)
        return ANET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons((uint16_t)port);
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bindaddr && inet_aton(bindaddr, (void*)&sa.sin_addr) == 0) {
        anetSetError(err, "invalid bind address");
        close(s);
        return ANET_ERR;
    }
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR)
        return ANET_ERR;
    return s;
}
Example #8
0
int kr_net_tcp_server(char *err, int port, char *bindaddr)
{
    int s;
    struct sockaddr_in sa;

    if ((s = anetCreateSocket(err,AF_INET)) == KR_NET_ERR)
        return KR_NET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bindaddr && inet_aton(bindaddr, &sa.sin_addr) == 0) {
        kr_net_set_error(err, "invalid bind address");
        close(s);
        return KR_NET_ERR;
    }
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == KR_NET_ERR)
        return KR_NET_ERR;
    return s;
}
Example #9
0
int anetUnixServer(char *err, char *path, mode_t perm)
{
#ifdef _WIN32
    ANET_NOTUSED(err);
    ANET_NOTUSED(path);
    ANET_NOTUSED(perm);
    return ANET_ERR;
#else
    int s;
    struct sockaddr_un sa;

    if ((s = anetCreateSocket(err,AF_LOCAL)) == ANET_ERR)
        return ANET_ERR;

    memset(&sa,0,sizeof(sa));
    sa.sun_family = AF_LOCAL;
    strncpy(sa.sun_path,path,sizeof(sa.sun_path)-1);
    if (anetListen(err,s,(struct sockaddr*)&sa,sizeof(sa)) == ANET_ERR)
        return ANET_ERR;
    if (perm)
        chmod(sa.sun_path, perm);
    return s;
#endif
}