static void socket_print(ScmObj obj, ScmPort *port, ScmWriteContext *ctx) { ScmSocket *sock = SCM_SOCKET(obj); Scm_Printf(port, "#<socket"); switch (sock->status) { case SCM_SOCKET_STATUS_NONE: break; case SCM_SOCKET_STATUS_BOUND: Scm_Printf(port, " (bound %S)", Scm_SockAddrName(sock->address)); break; case SCM_SOCKET_STATUS_LISTENING: Scm_Printf(port, " (listen %S)", Scm_SockAddrName(sock->address)); break; case SCM_SOCKET_STATUS_CONNECTED: Scm_Printf(port, " (connect %S)", Scm_SockAddrName(sock->address)); break; case SCM_SOCKET_STATUS_SHUTDOWN: Scm_Printf(port, " (shutdown)"); break; case SCM_SOCKET_STATUS_CLOSED: Scm_Printf(port, " (closed)"); break; default: Scm_Printf(port, " (unknown status)"); break; } Scm_Printf(port, ">"); }
void sockaddr_print(ScmObj obj, ScmPort *port, ScmWriteContext *ctx) { Scm_Printf(port, "#<sockaddr %S %S>", Scm_SockAddrFamily(SCM_SOCKADDR(obj)), Scm_SockAddrName(SCM_SOCKADDR(obj))); }
ScmClass *Scm_SockAddrCPL[] = { SCM_CLASS_STATIC_PTR(Scm_SockAddrClass), SCM_CLASS_STATIC_PTR(Scm_TopClass), NULL }; SCM_DEFINE_BUILTIN_CLASS(Scm_SockAddrClass, sockaddr_print, NULL, NULL, sockaddr_allocate, NULL); void sockaddr_print(ScmObj obj, ScmPort *port, ScmWriteContext *ctx SCM_UNUSED) { Scm_Printf(port, "#<sockaddr %S %S>", Scm_SockAddrFamily(SCM_SOCKADDR(obj)), Scm_SockAddrName(SCM_SOCKADDR(obj))); } int Scm_SockAddrP(ScmObj obj) { return Scm_SubtypeP(Scm_ClassOf(obj), SCM_CLASS_SOCKADDR); } /* C interface of sockaddr-name and sockaddr-family */ ScmObj Scm_SockAddrName(ScmSockAddr *addr) { return Scm_ApplyRec(SCM_OBJ(&Scm_GenericSockAddrName), SCM_LIST1(SCM_OBJ(addr))); } ScmObj Scm_SockAddrFamily(ScmSockAddr *addr)