| #define SOCKRX_RBSIZE | 512 | | | | /* tcp2ras socket rx buffer size */ | | #define SOCKRX_TBSIZE | 128 | | | | /* tcp2ras socket tx buffer size */ |
| #define SOCKTX_RBSIZE | 32 | | | | /* ras2tcp socket rx buffer size */ | | #define SOCKTX_TBSIZE | 512 | | | | /* ras2tcp socket tx buffer size */ |
| | | | | #define WSSIAM_MAX_INCOME_CONN | | | 4 /* maximum incoming connections we accept - do not work on MQX 4.1.* */ |
void wssiam_tcp2ras_task(uint32_t args) { sockaddr_in local_addr; uint32_t sock, listensock; uint32_t error; uint16_t rlen; uint32_t sockrx_rbsize = SOCKRX_RBSIZE; uint32_t sockrx_tbsize = SOCKRX_TBSIZE; for (;;) { sock = socket(PF_INET, SOCK_STREAM, 0); setsockopt(sock, SOL_TCP, OPT_RBSIZE, &sockrx_rbsize, sizeof(sockrx_rbsize)); setsockopt(sock, SOL_TCP, OPT_TBSIZE, &sockrx_tbsize, sizeof(sockrx_tbsize)); local_addr.sin_family = AF_INET; local_addr.sin_port = dev_config.ws_port; local_addr.sin_addr.s_addr = INADDR_ANY; error = bind(sock, &local_addr, sizeof(local_addr)); if (error != RTCS_OK) { shutdown(sock, FLAG_ABORT_CONNECTION); DBG_ERROR("Failed to bind the stream socket"); continue; } error = listen(sock, WSSIAM_MAX_INCOME_CONN); if (error != RTCS_OK) { shutdown(sock, FLAG_ABORT_CONNECTION); DBG_ERROR("listen() failed"); _time_delay(1000); continue; } listensock = sock; for (;;) { int r; sockaddr_in remote_addr; char recv_buf[SOCKRX_RBSIZE]; uint32_t socktimeout; rlen = sizeof(remote_addr); sock = accept(listensock, &remote_addr, &rlen); if (sock == RTCS_SOCKET_ERROR) { shutdown(sock, FLAG_ABORT_CONNECTION); DBG_ERROR("accept() failed"); continue; } socktimeout = SOCK_TIMEOUT; setsockopt(sock, SOL_TCP, OPT_TIMEWAIT_TIMEOUT, &socktimeout, sizeof(socktimeout)); socktimeout = SEND_TIMEOUT; setsockopt(sock, SOL_TCP, OPT_SEND_TIMEOUT, &socktimeout, sizeof(socktimeout)); setsockopt(sock, SOL_TCP, OPT_RBSIZE, &sockrx_rbsize, sizeof(sockrx_rbsize)); setsockopt(sock, SOL_TCP, OPT_TBSIZE, &sockrx_tbsize, sizeof(sockrx_tbsize)); r = recv(sock, recv_buf, sizeof(recv_buf), 0); /* parse data */ ... } } |