예제 #1
0
파일: socket.c 프로젝트: herchako/Procer
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;
}
예제 #2
0
파일: socket.c 프로젝트: herchako/Procer
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;
}
예제 #3
0
파일: socket.c 프로젝트: herchako/Procer
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;
}
예제 #4
0
파일: socket.c 프로젝트: herchako/Procer
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;
}
예제 #5
0
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;
}