+
+ return CYUTF8String(json, size);
+ }
+};
+
+class CYSocketRemote :
+ public CYRemote
+{
+ private:
+ int socket_;
+
+ public:
+ CYSocketRemote(const char *host, const char *port) {
+ struct addrinfo hints;
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = 0;
+ hints.ai_flags = 0;
+
+ struct addrinfo *infos;
+ _syscall(getaddrinfo(host, port, &hints, &infos));
+
+ _assert(infos != NULL); try {
+ for (struct addrinfo *info(infos); info != NULL; info = info->ai_next) {
+ socket_ = _syscall(socket(info->ai_family, info->ai_socktype, info->ai_protocol)); try {
+ _syscall(connect(socket_, info->ai_addr, info->ai_addrlen));
+ break;
+ } catch (...) {
+ _syscall(close(socket_));
+ throw;
+ }
+ }
+ } catch (...) {
+ freeaddrinfo(infos);
+ throw;
+ }
+ }
+
+ virtual CYUTF8String Run(CYPool &pool, CYUTF8String code) {
+ const char *json;
+ uint32_t size;
+