コード例 #1
0
e_int32 Socket_Connect(socket_t *socket) {
	int sockfd, sockLen;
	int ret;
	struct sockaddr_in peer_address;
	struct sockaddr_un sockAddr;
	unsigned long ul = 1;

	e_assert((socket && socket->state), E_ERROR);
	sockfd = (int) socket->priv;

//	ret = ioctl(sockfd, FIONBIO, &ul); //设置为非阻塞模式
//	e_assert(ret==0, E_ERROR_INVALID_CALL);

	switch (socket->type) {
	case E_SOCKET_TCP:
	case E_SOCKET_UDP:
		peer_address.sin_family = AF_INET;
		ret = inet_aton(socket->ip_address, &peer_address.sin_addr); // store IP in antelope
		e_assert(ret, E_ERROR_INVALID_ADDRESS);
		peer_address.sin_port = htons(socket->port);

		ret = connect(sockfd, (struct sockaddr *) &peer_address,
				sizeof(struct sockaddr));
		break;
	case E_SOCKET_NAME:
		ret = make_unix_domain_addr(socket->ip_address, &sockAddr, &sockLen);
		e_assert(ret>0, E_ERROR_IO);
		ret = connect(sockfd, (const struct sockaddr*) &sockAddr, sockLen);
		break;
	default:
		return E_ERROR_INVALID_HANDLER;
	}

	if (ret == -1) {
		fd_set set;
		int len = sizeof(int);
		struct timeval tm;
		tm.tv_sec = 1;
		tm.tv_usec = 0;
		FD_ZERO(&set);
		FD_SET(sockfd, &set);
		if (select(sockfd + 1, NULL, &set, NULL, &tm) > 0) {
			getsockopt(sockfd, SOL_SOCKET, SO_ERROR, &ret, (socklen_t *) &len);
			if (ret == 0)
				ret = E_OK;
			else
				ret = E_ERROR_IO;
		} else
			ret = E_ERROR_IO;
	} else
		ret = E_OK;

//	ul = 0;
//	ioctl(sockfd, FIONBIO, &ul); //设置为阻塞模式

//	DMSG((STDOUT,"Socket_Connect  address=%s sockfd=%d ret=%d\n",socket->ip_address,sockfd,ret));

	return ret;
}
コード例 #2
0
void EGL_SEND(int size, int frames) {
	int sock, i, j, s;
	socklen_t slen;
	char buf[100], *sbuf;

	printf("-> Start...\n");

#if SOCKET_TCP
    struct sockaddr_in server;
    if ( (sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0 ) {
        return;
     }

    memset(&server, 0, sizeof(server));
    server.sin_family = AF_INET;
    inet_aton(IP_ADDRESS,&server.sin_addr);
    // server.sin_addr.s_addr = inet(IP_ADDRESS);//htonl(INADDR_ANY);
    server.sin_port = htons(PORT);
#else
    struct sockaddr_un server;
	sock = socket(AF_UNIX, SOCK_STREAM, 0);
	if (sock < 0) {
		perror("opening stream socket");
		return;
	}

	make_unix_domain_addr(NAME, &server, &slen);
#endif
	if (connect(sock, (struct sockaddr *) &server, sizeof(server)) < 0) {
		close(sock);
		perror("connecting stream socket");
		return;
	}

	printf("-> Connected...\n");

	sprintf(buf, HEAD, size, size,1.0);
	if (send(sock, buf, 26, 0) < 0)
		perror("writing on stream socket");

	printf("-> Send size done...\n");

	printf("-> Send frame\n");
	if (frames == -1)
		frames = 65535;

	sbuf = (char*) malloc(size * size);
	for (i = 0; i < frames; i++) {
		create_image(sbuf, i, size);
		s = send(sock, sbuf, size * size, 0);
		if (s < 0)
			break;
		sleep(1);
	}
	free(sbuf);

	close(sock);
}
コード例 #3
0
e_int32 Socket_Bind(socket_t *socket) {
	int sockfd;
	int ret, sockLen;
	struct sockaddr_in peer_address;
	struct sockaddr_un sockAddr;

	e_assert((socket && socket->state), E_ERROR);

	sockfd = (int) socket->priv;

	switch (socket->type) {
	case E_SOCKET_TCP:
	case E_SOCKET_UDP:
		/*监听的IP可以为空*/
		if (strlen(socket->ip_address) == 0)
			peer_address.sin_addr.s_addr = htonl(INADDR_ANY);
		else {
			ret = inet_aton(socket->ip_address, &peer_address.sin_addr); // store IP in antelope
			e_assert(ret, E_ERROR_INVALID_ADDRESS);
		}

		peer_address.sin_family = AF_INET;
		peer_address.sin_port = htons(socket->port);
		ret = bind(sockfd, (struct sockaddr *) &peer_address,
				sizeof(struct sockaddr_in));
		break;
	case E_SOCKET_NAME:
		if (!make_unix_domain_addr(socket->ip_address, &sockAddr, &sockLen))
			return E_ERROR_IO;
		ret = bind(sockfd, (const struct sockaddr*) &sockAddr, sockLen);
		break;
	}

	e_assert((ret != SOCKET_ERROR), E_ERROR_IO);
	return E_OK;
}