ScmObj Scm_SocketBind(ScmSocket *sock, ScmSockAddr *addr) { int r; CLOSE_CHECK(sock->fd, "bind", sock); SCM_SYSCALL(r, bind(sock->fd, &addr->addr, addr->addrlen)); if (r < 0) { Scm_SysError("bind failed to %S", addr); } /* The system may assign different address than <addr>, especially when <addr> contains some 'wild card' (e.g. port=0). We call getsockname to obtain the exact address. Patch provided by ODA Hideo */ ScmSockAddr *naddr = SCM_SOCKADDR( Scm_MakeSockAddr(SCM_CLASS_OF(addr), &addr->addr, addr->addrlen)); SCM_SYSCALL(r, getsockname(sock->fd, &naddr->addr, &naddr->addrlen)); if (r < 0) { Scm_SysError("getsockname failed to %S", addr); } sock->address = naddr; sock->status = SCM_SOCKET_STATUS_BOUND; return SCM_OBJ(sock); }
#ifdef HAVE_WINCRYPT_H #include <wincrypt.h> #endif /* * Class */ static ScmObj mbed_allocate(ScmClass *klass, ScmObj initargs); static void mbedtls_print(ScmObj obj, ScmPort* port, ScmWriteContext* ctx SCM_UNUSED) { Scm_Printf(port, "#<%A", Scm_ShortClassName(SCM_CLASS_OF(obj))); /* at the moment there's not much to print, so we leave this hole for future development. */ Scm_Printf(port, ">"); } /* NB: We avoid referring Scm_TLSClass statically, since it is in another DSO module and some OS doesn't resolve inter-DSO static data. We set the CPA field in init routine. */ SCM_DEFINE_BUILTIN_CLASS(Scm_MbedTLSClass, mbedtls_print, NULL, NULL, mbed_allocate, NULL); static ScmObj k_server_name; /* * Instance