* dgram-socket create <local> => <sockid>
* dgram-socket close <sockid>
* dgram-socket transmit <sockid> <data> <remote>
- * dgram-socket on-receive <sockid> <script>
+ * dgram-socket on-receive <sockid> [<script>]
* calls, effectively, eval <script> [list <data> <remote-addr> <socket>]
+ * if script not supplied, cancel
*/
#include "tables.h"
return TCL_OK;
}
+int do_dgram_socket_transmit(ClientData cd, Tcl_Interp *ip,
+ int sock, HBytes_Value data,
+ SockAddr_Value remote) {
+ int l, r;
+
+ r= sendto(socks[sock].fd,
+ hbytes_data(&data), l=hbytes_len(&data),
+ 0,
+ sockaddr_addr(&remote), sockaddr_len(&remote));
+ if (r==-1) return posixerr(ip,errno,"sendto");
+ else if (r!=l) return staticerr(ip,"sendto gave wrong answer");
+ return TCL_OK;
+}
+
int do_dgram_socket_close(ClientData cd, Tcl_Interp *ip, int sock) {
close(socks[sock].fd); /* nothing useful to be done with errors */
socks[sock].fd= -1;