t_socket_client *sockets_accept(t_socket_server* server){ t_socket_client* client = malloc( sizeof(t_socket_client) ); int addrlen = sizeof(struct sockaddr_in); client->socket = malloc( sizeof(t_socket) ); client->socket->my_addr = malloc( sizeof(struct sockaddr) ); if( !sockets_isBlocked(server->socket) ){ fcntl(server->socket->desc, F_SETFL, O_NONBLOCK); } if ((client->socket->desc = accept(server->socket->desc, (struct sockaddr *)client->socket->my_addr, (void *)&addrlen)) == -1) { free(client->socket->my_addr); free(client->socket); free(client); return NULL; } if( !sockets_isBlocked(server->socket) ){ fcntl(server->socket->desc, F_SETFL, O_NONBLOCK); } sockets_setState(client, SOCKETSTATE_CONNECTED); sockets_setMode(client->socket, SOCKETMODE_BLOCK); return client; }
t_socket_client *sockets_acceptUnix(t_socket_server* server){ t_socket_client* client = malloc( sizeof(t_socket_client) ); socklen_t len; client->socket = malloc( sizeof(t_socket) ); client->socket->my_addr = malloc(sizeof(struct sockaddr_un)); if( !sockets_isBlocked(server->socket) ){ fcntl(server->socket->desc, F_SETFL, O_NONBLOCK); } if ((client->socket->desc = accept(server->socket->desc, client->socket->my_addr, &len)) == -1) { printf("%s", strerror(errno)); free(client->socket->my_addr); free(client->socket); free(client); return NULL; } if( !sockets_isBlocked(server->socket) ){ fcntl(server->socket->desc, F_SETFL, O_NONBLOCK); } sockets_setState(client, SOCKETSTATE_CONNECTED); sockets_setMode(client->socket, SOCKETMODE_BLOCK); return client; }
t_socket *sockets_createUnix(char *path){ t_socket *sckt = malloc( sizeof(t_socket) ); sckt->desc = socket(PF_UNIX, SOCK_STREAM, 0); sckt->my_addr = sockets_makeaddrUnix(path); sockets_setMode(sckt, SOCKETMODE_BLOCK); return sckt; }
t_socket *sockets_create(char* ip, int port){ t_socket* sckt = malloc( sizeof(t_socket) ); sckt->desc = socket(AF_INET, SOCK_STREAM, 0); if( !sockets_bind(sckt, ip, port) ){ free(sckt); return NULL; } sockets_setMode(sckt, SOCKETMODE_BLOCK); return sckt; }
t_socket *sockets_create(char* ip, int port){ t_socket* sckt = malloc( sizeof(t_socket) ); sckt->desc = socket(AF_INET, SOCK_STREAM, 0); if( !sockets_bind(sckt, ip, port) ){ free(sckt); return NULL; } int flag=1; // Re-Use Address setsockopt(sckt->desc, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof flag); // Avoid nagle problem setsockopt(sckt->desc, IPPROTO_TCP, TCP_NODELAY, &flag, sizeof(flag)); sockets_setMode(sckt, SOCKETMODE_BLOCK); return sckt; }