From: Ian Jackson Date: Sat, 18 Aug 2018 21:50:51 +0000 (+0100) Subject: dgram: Provide `dgram-socket sockname S'. X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=commitdiff_plain;h=1491bd7c4b2f7428cf457fb28cd7607550d564e3;p=chiark-tcl.git dgram: Provide `dgram-socket sockname S'. Closes:#865451. Signed-off-by: Ian Jackson --- diff --git a/debian/changelog b/debian/changelog index c859f29..1c3415d 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,9 @@ chiark-tcl (1.2.2~) unstable; urgency=medium * Fix IPv6 PTR (reverse) lookups, and compilation with GCC-8. Closes:#891544. + dgram: + * Provide `dgram-socket sockname S'. Closes:#865451. + tcmdifgen: * Turn on warnings and `use strict' and fix everything. * Replace deprecated `use IO;' with `use IO::File'. diff --git a/dgram/dgram.c b/dgram/dgram.c index 24c5446..5ffe91f 100644 --- a/dgram/dgram.c +++ b/dgram/dgram.c @@ -134,6 +134,18 @@ x_rc: Tcl_BackgroundError(ip); } +int cht_do_dgramsocket_sockname(ClientData cd, Tcl_Interp *ip, + void *sock_v, SockAddr_Value *result) { + DgramSocket *sock= sock_v; + int r; + + socklen_t salen = sock->addr_buflen; + r= getsockname(sock->fd, sock->addr_buf, &salen); + if (r) return cht_posixerr(ip,errno,"getsockname"); + cht_sockaddr_create(result, sock->addr_buf, salen); + return TCL_OK; +} + int cht_do_dgramsocket_on_receive(ClientData cd, Tcl_Interp *ip, void *sock_v, Tcl_Obj *newscript) { DgramSocket *sock= sock_v; diff --git a/dgram/dgram.tct b/dgram/dgram.tct index 119e354..938d0a3 100644 --- a/dgram/dgram.tct +++ b/dgram/dgram.tct @@ -32,6 +32,9 @@ Table dgramsocket DgramSocket_SubCommand sock iddata(&cht_dgram_socks) data hb remote sockaddr + sockname + sock iddata(&cht_dgram_socks) + => sockaddr on-receive sock iddata(&cht_dgram_socks) ?script obj