-Tcl_Obj *ret_sockid(Tcl_Interp *ip, DgramSocket *val) {
- Tcl_Obj *o;
-
- o= Tcl_NewObj();
- Tcl_InvalidateStringRep(o);
- o->internalRep.longValue= val->ix;
- o->typePtr= &sockid_type;
- return o;
-}
-
-static void sockid_t_free(Tcl_Obj *o) { }
-
-static void sockid_t_dup(Tcl_Obj *src, Tcl_Obj *dup) {
- dup->internalRep= src->internalRep;
-}
-
-static void sockid_t_ustr(Tcl_Obj *o) {
- char buf[100];
- int l;
-
- snprintf(buf,sizeof(buf),"dgramsock%d", (int)o->internalRep.longValue);
- l= o->length= strlen(buf);
- o->bytes= TALLOC(l+1);
- strcpy(o->bytes, buf);
-}
-
-static int sockid_t_sfa(Tcl_Interp *ip, Tcl_Obj *o) {
- unsigned long ul;
- char *ep, *str;
-
- str= Tcl_GetStringFromObj(o,0);
- if (memcmp(str,"dgramsock",9)) return staticerr(ip,"bad dgram socket id");
- errno=0; ul=strtoul(str+9,&ep,10);
- if (errno || *ep) return staticerr(ip,"bad dgram socket id number");
- if (ul > INT_MAX) return staticerr(ip,"out of range dgram socket id");
- o->internalRep.longValue= ul;
+int cht_do_dgramsocket_close(ClientData cd, Tcl_Interp *ip, void *sock_v) {
+ cht_tabledataid_disposing(ip,sock_v,&cht_dgram_socks);
+ destroy(sock_v);