%% options copyright owner = Dirk Krause copyright year = 2015-xxxx license = bsd %% module #define TEST_SOCK_USE_APP 1 #define TEST_SOCK_REMOTE_SERVER "s-ka.e-technik.fh-schmalkalden.de" #define TEST_SOCK_REMOTE_PORT 80 #define TEST_SOCK_LOCAL_PORT 55555 #define TEST_SOCK_TIMEOUT_SEC 0L #define TEST_SOCK_TIMEOUT_USEC 0L #include "dk4conf.h" #include "dk4app.h" #include "dk4sock.h" #include "dk4socka.h" #include "dk4vers.h" #include "dk4fput.h" $!trace-include static const dkChar server[] = { dkT("s-ka.e-technik.fh-schmalkalden.de") }; static const char request[] = { "GET /index.html HTTP/1.0\r\n\r\n" }; static const dkChar * const help_text[] = { $!string-table macro=dkT Nix Hilfe! $!end }; static const dkChar * const license_text[] = { $!string-table macro=dkT BSD $!end }; static const dkChar * const kw_def[] = { $!string-table macro=dkT # # 0 # Failed to create socket! # # 1 # Failed to bring Winsock up! # # 2 # Failed to send data! $!end }; static size_t sz_kw_def = sizeof(kw_def)/sizeof(DK4_PCDKCHAR); /** Main function. @param argc Number of command line arguments. @param argv Command line arguments array. @return 0 on success, all other values indicate errors. */ #if DK4_CHAR_SIZE > 1 int wmain(int argc, wchar_t *argv[]) #else int main(int argc, char *argv[]) #endif { #if TEST_SOCK_USE_APP char buf[512]; dk4_app_t *app = NULL; size_t rql; dk4_socket_t sock; #if DK4_ON_WINDOWS int bytes; #else ssize_t bytes; #endif $!trace-init test-sock.deb $? "+ main" dk4fput_initialize_stderr(); app = dk4app_open_cmd( argc, argv, NULL, 0, dkT("dktools"), DKT_VERSION_DK, dkT("test-sock.txt"), help_text, license_text ); if (NULL != app) { if (DK4_SOCKET_RESULT_SUCCESS == dk4socket_up_app(app)) { $? ". up" rql = strlen(request); sock = dk4socket_tcp_client_for_host_port_app( server, TEST_SOCK_REMOTE_PORT, TEST_SOCK_LOCAL_PORT, TEST_SOCK_TIMEOUT_SEC, TEST_SOCK_TIMEOUT_USEC, app ); if (INVALID_SOCKET != sock) { $? ". socket ok" bytes = send(sock, request, rql, 0); if (bytes == rql) { $? ". send ok" do { bytes = recv(sock, buf, sizeof(buf), 0); if (0 < bytes) { fwrite(buf, 1, bytes, stdout); } } while(0 < bytes); fputc('\n', stdout); } else { $? "! send failed" dk4app_log_1(app, kw_def, sz_kw_def, DK4_LL_ERROR, 2); } dk4socket_close(sock, NULL); } else { $? "! invalid socket" dk4app_log_1(app, kw_def, sz_kw_def, DK4_LL_ERROR, 0); } dk4socket_down_app(app); } else { $? "! Winsock up" dk4app_log_1(app, kw_def, sz_kw_def, DK4_LL_ERROR, 1); } dk4app_close(app); } fflush(stderr); dk4fput_cleanup_stderr(); $? "- main" $!trace-end exit(0); return 0; #else char buf[512]; size_t rql; dk4_socket_t sock; #if DK4_ON_WINDOWS int bytes; #else ssize_t bytes; #endif $!trace-init test-sock.deb $? "+ main" rql = strlen(request); if (DK4_SOCKET_RESULT_SUCCESS == dk4socket_up(NULL)) { $? ". up" sock = dk4socket_tcp_client_host_port( server, TEST_SOCK_REMOTE_PORT, TEST_SOCK_LOCAL_PORT, TEST_SOCK_TIMEOUT_SEC, TEST_SOCK_TIMEOUT_USEC, NULL ); if (INVALID_SOCKET != sock) { $? ". socket" bytes = send(sock, request, rql, 0); if (bytes == rql) { $? ". send" do { bytes = recv(sock, buf, sizeof(buf), 0); if (0 < bytes) { fwrite(buf, 1, bytes, stdout); } } while(0 < bytes); fputc('\n', stdout); } else { $? "! send" } dk4socket_close(sock, NULL); } else { $? "! socket" } dk4socket_down(NULL); } else { $? "! failed to bring Winsock up" } $? "- main" $!trace-end exit(0); return 0; #endif }