HI,
   Could anybody respond to this issue?  

BR
Yan Limin


_____________________________________________
From: Yan, Liming (NSB - CN/Hangzhou) 
Sent: Tuesday, October 16, 2018 4:49 PM
To: '[email protected]' <[email protected]>
Subject: getpeername() couldn't resolve the peer address with underlying fd 
achieved from zmq_socket_monitor ZMQ_EVENT_ACCEPTED event?


Hi,
   I created a monitor on a router socket and monitor the ZMQ_EVENT_ACCEPTED 
event. Each time when a new client accepted, I can get the event and underlying 
fd. The code is just as the example in page 
http://api.zeromq.org/4-1:zmq-socket-monitor . Then I need to use getpeername 
to know who is the peer ip address.  But this seems not work. I can only get 
0.0.0.0.  Does this underlying fd provided by monitor support getpeername()? Or 
anything wrong with me?  Thanks.

{
        char ip[128];
        struct sockaddr_in peer_addr;
        unsigned int peer_len;
        int ret, fd = (int)monitor_event->value;

        ret = getpeername(fd, (struct sockaddr *)&peer_addr, &peer_len);
        if (ret == -1) {
            printf("Get peer name failed. fd=%d. err=%d:%s.\n", fd, errno, 
strerror(errno));
        }
        else {
            inet_ntop(AF_INET, &peer_addr.sin_addr, ip, sizeof(ip));
            printf("New client accepted: %s:%d. Local socket:%s. fd=%d.\n", ip, 
ntohs(peer_addr.sin_port),
                         monitor_event->socket_addr, fd);
        }
}
   New client accepted: 0.0.0.0:29186. Local socket:tcp://169.254.0.10:48000. 
fd=34.

ZMQ_EVENT_ACCEPTED
The socket has accepted a connection from a remote peer. The event value is the 
FD of the underlying network socket. Warning: there is no guarantee that the FD 
is still valid by the time your code receives this event.



BR
Yan Limin


_______________________________________________
zeromq-dev mailing list
[email protected]
https://lists.zeromq.org/mailman/listinfo/zeromq-dev

Reply via email to