%% options copyright owner = Dirk Krause copyright year = 2015-xxxx license = bsd %% module #include "dk4sock.h" #include #if DK4_HAVE_ERRNO_H #ifndef ERRNO_H_INCLUDED #include #define ERRNO_H_INCLUDED 1 #endif #endif #if DK4_HAVE_UNISTD_H #ifndef UNISTD_H_INCLUDED #include #define UNISTD_H_INCLUDED 1 #endif #endif #if DK4_HAVE_IO_H #ifndef IO_H_INCLUDED #include #define IO_H_INCLUDED 1 #endif #endif $!trace-include dk4_socket_t dk4socket_open(int af, int tp, int pr, dk4_er_t *erp) { dk4_socket_t back = INVALID_SOCKET; $? "+ dk4socket_open" switch (af) { case AF_INET: #if DK4_HAVE_STRUCT_SOCKADDR_IN6 case AF_INET6: #endif #if defined(AF_UNIX) case AF_UNIX: #endif #if defined(AF_LOCAL) && (AF_UNIX != AF_LOCAL) case AF_LOCAL: #endif { switch (tp) { case SOCK_STREAM : case SOCK_DGRAM : { dk4socket_error_reset(); back = socket(af, tp, pr); if (INVALID_SOCKET == back) { dk4socket_error_report(erp, DK4_E_SOCKET_SOCKET); } } break; default: { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); $? "! tp" } break; } } break; default: { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); $? "! af" } break; } $? "- dk4socket_open %d", (int)back return back; } int dk4socket_close(dk4_socket_t so, dk4_er_t *erp) { int back = DK4_SOCKET_RESULT_FAILED; if (INVALID_SOCKET != so) { dk4socket_error_reset(); #if DK4_ON_WINDOWS if (0 == closesocket(so)) #else if (0 == close(so)) #endif { back = DK4_SOCKET_RESULT_SUCCESS; } else { dk4socket_error_report(erp, DK4_E_SOCKET_CLOSE); } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; } int dk4socket_shutdown(dk4_socket_t so, int how, dk4_er_t *erp) { int back = DK4_SOCKET_RESULT_FAILED; if (INVALID_SOCKET != so) { switch (how) { case DK4_SOCKET_SHUT_READ : case DK4_SOCKET_SHUT_WRITE : case DK4_SOCKET_SHUT_RDWR : { dk4socket_error_reset(); if (0 == shutdown(so, how)) { back = DK4_SOCKET_RESULT_SUCCESS; } else { dk4socket_error_report(erp, DK4_E_SOCKET_SHUTDOWN); } } break; default : { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } break; } } else { dk4error_set_simple_error_code(erp, DK4_E_INVALID_ARGUMENTS); } return back; }