chiark / gitweb /
dgram: Provide `dgram-socket sockname S'.
[chiark-tcl.git] / dgram / dgram.c
index 24c5446c0b1625528f98fbb5ce4dceb664845f28..5ffe91ff5ae584ee17424c05e787f96b8540824a 100644 (file)
@@ -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;