コード例 #1
0
ファイル: net.c プロジェクト: jxva/miaoox
int netTcpConnect(char *err, char *addr, int port){
    int so;
    struct sockaddr_in sa;

    if ((so = netCreateSocket(err, AF_INET)) == -1)
        return -1;

    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    if (inet_aton(addr, &sa.sin_addr) == 0) {
        struct hostent *he;
        he = gethostbyname(addr);
        if (he == NULL) {
            netPrintError(err, "can't resolve: %s", addr);
            close(so);
            return -1;
        }
        memcpy(&sa.sin_addr, he->h_addr, sizeof(struct in_addr));
    }
    if (netSetNonBlock(err, so) == -1) {
        return -1;
    }
    if (connect(so, (struct sockaddr*)&sa, sizeof(sa)) == -1) {
        if (errno = EINPROGRESS)
            return so;
        netPrintError(err, "connect: %s", strerror(errno));
        close(so);
        return -1;
    }
    return so;
}
コード例 #2
0
ファイル: client.c プロジェクト: Fizzixnerd/home-scripts
int main(int argc, char** argv)
{
	const char* address = "127.0.0.1";
	int port = 1234;
	int outgoingSocket;

	// register callbacks
	netRegisterReadCallback(onRead);
	netRegisterWriteCallback(onWrite);
	netRegisterErrorCallback(onError);

	// start network
	CHECK(netStartup());

	// create outgoing connection to the server socket
	CHECK(netCreateSocket(&outgoingSocket));

	// connect
	CHECK(netConnect(outgoingSocket, address, port));

	// process events
	while (1) {
		CHECK(netWait(1000));
		printf("tick\n");
	}

	// shutdown network
	CHECK(netCleanup());

	return 0;
}
コード例 #3
0
ファイル: jswrap_telnet.c プロジェクト: 8bitgeek/Espruino
// Start the listening socket for the telnet console server.
void telnetStart(JsNetwork *net) {
  // create the listening socket
  printf("tnSrv: creating...\n");
  int sock = netCreateSocket(net, 0, PORT, NCF_NORMAL, NULL);
  if (sock == 0) {
    printf("tnSrv: cannot create listening socket\n");
    return;
  }
  tnSrv.sock = sock;
  printf("tnSrv: started sock=%d\n", sock);
}
コード例 #4
0
ファイル: socketserver.c プロジェクト: WiceAS/Espruino
// Connect this connection/socket
void clientRequestConnect(JsNetwork *net, JsVar *httpClientReqVar) {
    // Have we already connected? If so, don't go further
    if (jsvGetIntegerAndUnLock(jsvObjectGetChild(httpClientReqVar, HTTP_NAME_SOCKET, 0))>0)
        return;

    SocketType socketType = socketGetType(httpClientReqVar);

    JsVar *options = jsvObjectGetChild(httpClientReqVar, HTTP_NAME_OPTIONS_VAR, false);
    unsigned short port = (unsigned short)jsvGetIntegerAndUnLock(jsvObjectGetChild(options, "port", 0));

    char hostName[128];
    JsVar *hostNameVar = jsvObjectGetChild(options, "host", 0);
    if (jsvIsUndefined(hostNameVar))
        strncpy(hostName, "localhost", sizeof(hostName));
    else
        jsvGetString(hostNameVar, hostName, sizeof(hostName));
    jsvUnLock(hostNameVar);

    uint32_t host_addr = 0;
    networkGetHostByName(net, hostName, &host_addr);

    if(!host_addr) {
        jsError("Unable to locate host\n");
        // As this is already in the list of connections, an error will be thrown on idle anyway
        jsvObjectSetChildAndUnLock(httpClientReqVar, HTTP_NAME_CLOSENOW, jsvNewFromBool(true));
        jsvUnLock(options);
        netCheckError(net);
        return;
    }

    NetCreateFlags flags = NCF_NORMAL;
#ifdef USE_TLS
    if (socketType & ST_TLS) {
        flags |= NCF_TLS;
        if (port==0) port = 443;
    }
#endif

    if (port==0) port = 80;

    int sckt =  netCreateSocket(net, host_addr, port, flags, options);
    if (sckt<0) {
        jsError("Unable to create socket\n");
        // As this is already in the list of connections, an error will be thrown on idle anyway
        jsvObjectSetChildAndUnLock(httpClientReqVar, HTTP_NAME_CLOSENOW, jsvNewFromBool(true));
    } else {
        jsvObjectSetChildAndUnLock(httpClientReqVar, HTTP_NAME_SOCKET, jsvNewFromInteger(sckt+1));
    }

    jsvUnLock(options);

    netCheckError(net);
}
コード例 #5
0
ファイル: socketserver.c プロジェクト: WiceAS/Espruino
void serverListen(JsNetwork *net, JsVar *server, int port) {
    JsVar *arr = socketGetArray(HTTP_ARRAY_HTTP_SERVERS, true);
    if (!arr) return; // out of memory

    jsvObjectSetChildAndUnLock(server, HTTP_NAME_PORT, jsvNewFromInteger(port));

    int sckt = netCreateSocket(net, 0/*server*/, (unsigned short)port, NCF_NORMAL, 0 /*options*/);
    if (sckt<0) {
        jsError("Unable to create socket\n");
        jsvObjectSetChildAndUnLock(server, HTTP_NAME_CLOSENOW, jsvNewFromBool(true));
    } else {
        jsvObjectSetChildAndUnLock(server, HTTP_NAME_SOCKET, jsvNewFromInteger(sckt+1));
        // add to list of servers
        jsvArrayPush(arr, server);
    }
    jsvUnLock(arr);
}
コード例 #6
0
ファイル: net.c プロジェクト: jxva/miaoox
int netStartServer(char *err, int port, char *bindaddr) {
    int so;
    struct sockaddr_in sa;
    /*struct sockaddr_in sa;*/

    if ((so = netCreateSocket(err, AF_INET)) == -1)
        return -1;
    //netSetSocketReuse(err, so);
    memset(&sa, 0, sizeof(sa));
    sa.sin_family = AF_INET;
    sa.sin_port = htons(port);
    sa.sin_addr.s_addr = htonl(INADDR_ANY);
    if (bindaddr && inet_aton(bindaddr, &sa.sin_addr) == 0) {
        netPrintError(err, "invalid bind address");
        close(so);
        return -1;
    }
    if (netBind(err, so, (struct sockaddr*)&sa) == -1)
        return -1;
    if (netListen(err, so, (struct sockaddr*)&sa) == -1)
        return -1;
    return so;
}