mirror of
https://github.com/lwip-tcpip/lwip.git
synced 2024-10-02 12:52:10 +00:00
fixed bug #38404 getpeeraddr returns success on unconnected/listening TCP sockets
This commit is contained in:
parent
2666d6df90
commit
c60635855d
@ -96,6 +96,10 @@ HISTORY
|
|||||||
|
|
||||||
++ Bugfixes:
|
++ Bugfixes:
|
||||||
|
|
||||||
|
2014-02-27: Simon Goldschmidt
|
||||||
|
* api_msg.c, sockets.c: fixed bug #38404 getpeeraddr returns success on
|
||||||
|
unconnected/listening TCP sockets
|
||||||
|
|
||||||
2014-02-27: Simon Goldschmidt
|
2014-02-27: Simon Goldschmidt
|
||||||
* sockets.c: fixed bug #41729 Some socket functions return Exyz instead of -1
|
* sockets.c: fixed bug #41729 Some socket functions return Exyz instead of -1
|
||||||
|
|
||||||
|
@ -1455,7 +1455,13 @@ lwip_netconn_do_getaddr(struct api_msg_msg *msg)
|
|||||||
#endif /* LWIP_UDP */
|
#endif /* LWIP_UDP */
|
||||||
#if LWIP_TCP
|
#if LWIP_TCP
|
||||||
case NETCONN_TCP:
|
case NETCONN_TCP:
|
||||||
API_EXPR_DEREF(msg->msg.ad.port) = (msg->msg.ad.local?msg->conn->pcb.tcp->local_port:msg->conn->pcb.tcp->remote_port);
|
if ((msg->msg.ad.local == 0) &&
|
||||||
|
((msg->conn->pcb.tcp->state == CLOSED) || (msg->conn->pcb.tcp->state == LISTEN))) {
|
||||||
|
/* pcb is not connected and remote name is requested */
|
||||||
|
msg->err = ERR_CONN;
|
||||||
|
} else {
|
||||||
|
API_EXPR_DEREF(msg->msg.ad.port) = (msg->msg.ad.local ? msg->conn->pcb.tcp->local_port : msg->conn->pcb.tcp->remote_port);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif /* LWIP_TCP */
|
#endif /* LWIP_TCP */
|
||||||
default:
|
default:
|
||||||
|
@ -1478,6 +1478,7 @@ lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, u8_t local)
|
|||||||
union sockaddr_aligned saddr;
|
union sockaddr_aligned saddr;
|
||||||
ipX_addr_t naddr;
|
ipX_addr_t naddr;
|
||||||
u16_t port;
|
u16_t port;
|
||||||
|
err_t err;
|
||||||
|
|
||||||
sock = get_socket(s);
|
sock = get_socket(s);
|
||||||
if (!sock) {
|
if (!sock) {
|
||||||
@ -1486,7 +1487,11 @@ lwip_getaddrname(int s, struct sockaddr *name, socklen_t *namelen, u8_t local)
|
|||||||
|
|
||||||
/* get the IP address and port */
|
/* get the IP address and port */
|
||||||
/* @todo: this does not work for IPv6, yet */
|
/* @todo: this does not work for IPv6, yet */
|
||||||
netconn_getaddr(sock->conn, ipX_2_ip(&naddr), &port, local);
|
err = netconn_getaddr(sock->conn, ipX_2_ip(&naddr), &port, local);
|
||||||
|
if (err != ERR_OK) {
|
||||||
|
sock_set_errno(sock, err_to_errno(err));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
IPXADDR_PORT_TO_SOCKADDR(NETCONNTYPE_ISIPV6(netconn_type(sock->conn)),
|
IPXADDR_PORT_TO_SOCKADDR(NETCONNTYPE_ISIPV6(netconn_type(sock->conn)),
|
||||||
&saddr, &naddr, port);
|
&saddr, &naddr, port);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user