chiark
/
gitweb
/
~ian
/
chiark-tcl.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
ec73277
)
transmits
author
ian
<ian>
Sat, 7 Sep 2002 01:23:16 +0000
(
01:23
+0000)
committer
ian
<ian>
Sat, 7 Sep 2002 01:23:16 +0000
(
01:23
+0000)
base/tables-examples.tct
patch
|
blob
|
history
dgram/dgram.c
patch
|
blob
|
history
diff --git
a/base/tables-examples.tct
b/base/tables-examples.tct
index 6f8755a8495d88d182bb358081c80372660458d0..f402a4c8811b9bffd2c10df0fc360fae9ef65b6f 100644
(file)
--- a/
base/tables-examples.tct
+++ b/
base/tables-examples.tct
@@
-91,5
+91,7
@@
Table dgram_socket DgramSocket_SubCommand
=> sockid
close
sock sockid
=> sockid
close
sock sockid
-# transmit
-#
+ transmit
+ sock sockid
+ data hb
+ remote sockaddr
diff --git
a/dgram/dgram.c
b/dgram/dgram.c
index e6df127ab79bae33afa345d9268193f17f70c7eb..7e98df224c4842facb5590cf6da01905693b1a23 100644
(file)
--- a/
dgram/dgram.c
+++ b/
dgram/dgram.c
@@
-4,8
+4,9
@@
* dgram-socket create <local> => <sockid>
* dgram-socket close <sockid>
* dgram-socket transmit <sockid> <data> <remote>
* 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>]
* calls, effectively, eval <script> [list <data> <remote-addr> <socket>]
+ * if script not supplied, cancel
*/
#include "tables.h"
*/
#include "tables.h"
@@
-52,6
+53,20
@@
int do_dgram_socket_create(ClientData cd, Tcl_Interp *ip,
return TCL_OK;
}
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;
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;