Beispiel #1
0
// 记录sock peer信息
void log_peer_info(int fd, const char* msg)
{
	char addr[INET_ADDRSTRLEN];
	uint32_t port;

	getpeerinfo(fd, addr, &port);
	fprintf(stdout, "%s %s:%d\n", msg, addr, port);
}
Beispiel #2
0
    int ServerPeerSocket::InitPeerInfo(){

        if(_socket<0){
            return -1;
        }

        PeerInfo tmp("", 0);
        int32_t ret = getpeerinfo((int32_t)_socket, tmp);
        if (ret != 0) {
            return ret;
        }
        _peerinfo = SharedPointer<PeerInfo>(new PeerInfo(tmp.GetHost(), tmp.GetPort()));
 
        return 0;
    }
Beispiel #3
0
int handle_socket_read(int fd)
{
	char buff[s_recv_buff_size];
	memset(buff, 0, s_recv_buff_size);

	char addr[INET_ADDRSTRLEN];
	uint32_t port = 0;

	getpeerinfo(fd, addr, &port);

	int recv_count = -1;
	while ((recv_count = wrap_read(fd, buff, s_recv_buff_size)) >= 0) {
		if (0 == recv_count) {
			handle_socket_close_event(fd);
			break;
		}
		buff[recv_count] = '\0';
		// write(fd, buff, recv_count);
		fprintf(stdout, "%s say: %s\n", addr, buff);
	}

	return recv_count;
}
Beispiel #4
0
void
icbd_accept(int fd, short event __attribute__((__unused__)),
    void *arg)
{
	struct icbd_listener *l = arg;
	struct sockaddr_storage ss;
	struct timeval p = { 1, 0 };
	struct icb_session *is;
	socklen_t ss_len = sizeof ss;
	int s, on = 1, tos = IPTOS_LOWDELAY;

	ss.ss_len = ss_len;
	s = accept(fd, (struct sockaddr *)&ss, &ss_len);
	if (s == -1) {
		switch (errno) {
		case EINTR:
		case EWOULDBLOCK:
		case ECONNABORTED:
			return;
		case EMFILE:
		case ENFILE:
			event_del(&l->ev);
			evtimer_add(&l->pause, &p);
			return;
		default:
			syslog(LOG_ERR, "accept: %m");
			return;
		}
	}

	if (ss.ss_family == AF_INET)
		if (setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof tos) < 0)
			syslog(LOG_WARNING, "IP_TOS: %m");
	if (setsockopt(s, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof on) < 0)
		syslog(LOG_WARNING, "SO_KEEPALIVE: %m");
	if ((is = calloc(1, sizeof *is)) == NULL) {
		syslog(LOG_ERR, "calloc: %m");
		(void)close(s);
		return;
	}
	if ((is->bev = bufferevent_new(s, icbd_dispatch, NULL, icbd_ioerr,
	    is)) == NULL) {
		syslog(LOG_ERR, "bufferevent_new: %m");
		(void)close(s);
		free(is);
		return;
	}
	if (bufferevent_enable(is->bev, EV_READ)) {
		syslog(LOG_ERR, "bufferevent_enable: %m");
		(void)close(s);
		bufferevent_free(is->bev);
		free(is);
		return;
	}

	/* save host information */
	getpeerinfo(is);

	/* start icb conversation */
	icb_start(is);
}