From owner-svn-ports-all@FreeBSD.ORG Mon Mar 23 11:15:37 2015 Return-Path: Delivered-To: svn-ports-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 169412E0; Mon, 23 Mar 2015 11:15:37 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id F3ADC97C; Mon, 23 Mar 2015 11:15:36 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t2NBFaYA010840; Mon, 23 Mar 2015 11:15:36 GMT (envelope-from arved@FreeBSD.org) Received: (from arved@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t2NBFaOJ010838; Mon, 23 Mar 2015 11:15:36 GMT (envelope-from arved@FreeBSD.org) Message-Id: <201503231115.t2NBFaOJ010838@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: arved set sender to arved@FreeBSD.org using -f From: Tilman Keskinoz Date: Mon, 23 Mar 2015 11:15:36 +0000 (UTC) To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r381986 - in head/benchmarks/netio: . files X-SVN-Group: ports-head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-ports-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: SVN commit messages for the ports tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 23 Mar 2015 11:15:37 -0000 Author: arved Date: Mon Mar 23 11:15:35 2015 New Revision: 381986 URL: https://svnweb.freebsd.org/changeset/ports/381986 QAT: https://qat.redports.org/buildarchive/r381986/ Log: Remove unnecessary whitespace changes in patchfile add in previous commit Modified: head/benchmarks/netio/Makefile head/benchmarks/netio/files/patch-netio.c Modified: head/benchmarks/netio/Makefile ============================================================================== --- head/benchmarks/netio/Makefile Mon Mar 23 08:42:57 2015 (r381985) +++ head/benchmarks/netio/Makefile Mon Mar 23 11:15:35 2015 (r381986) @@ -13,6 +13,7 @@ COMMENT= Network benchmark WRKSRC= ${WRKDIR} USES= gmake zip +PATCH_ARGS= -d ${PATCH_WRKSRC} -N -s -E ${PATCH_STRIP} -l PLIST_FILES= bin/netio CFLAGS+= -DUNIX -DSOCKLEN_T Modified: head/benchmarks/netio/files/patch-netio.c ============================================================================== --- head/benchmarks/netio/files/patch-netio.c Mon Mar 23 08:42:57 2015 (r381985) +++ head/benchmarks/netio/files/patch-netio.c Mon Mar 23 11:15:35 2015 (r381986) @@ -1,3126 +1,335 @@ ---- netio.c.orig 2015-03-22 18:03:25.739744000 +0100 -+++ netio.c 2015-03-22 18:03:36.459543000 +0100 -@@ -1,1505 +1,1618 @@ --/* netio.c -- * -- * Author: Kai-Uwe Rommel -- * Created: Wed Sep 25 1996 -- */ -- --static char *rcsid = --"$Id: netio.c,v 1.32 2012/11/22 16:47:24 Rommel Exp Rommel $"; --static char *rcsrev = "$Revision: 1.32 $"; -- --/* -- * $Log: netio.c,v $ -- * Revision 1.32 2012/11/22 16:47:24 Rommel -- * added binding to client sockets, too -- * -- * Revision 1.31 2010/10/14 16:44:38 Rommel -- * fixed sleep calls -- * -- * Revision 1.30 2010/10/14 14:32:41 Rommel -- * removed NetBIOS code -- * added server side result printing -- * fixed packet loss calculation (data type bug) -- * -- * Revision 1.29 2010/10/14 11:28:19 Rommel -- * central printing routine -- * -- * Revision 1.28 2009/09/07 14:09:39 Rommel -- * changed number output from bytes/KB to bytes/KB/MB -- * -- * Revision 1.27 2008/02/11 09:00:22 Rommel -- * re-randomize buffer data for each loop run -- * -- * Revision 1.26 2005/08/30 14:45:51 Rommel -- * minor fixes -- * -- * Revision 1.25 2004/05/26 07:23:04 Rommel -- * some more corrections from Oliver Lau and Frank Schnell -- * -- * Revision 1.24 2004/05/17 16:01:03 Rommel -- * fix for _send/_recv from Thomas Jahns -- * -- * Revision 1.23 2003/09/30 09:32:22 Rommel -- * corrections from Matthias Scheler for error handling -- * added socket buffer size setting -- * added htonl/ntohl code (hint from Oliver Lau) -- * restructured send/recv error/result checking -- * more verbose server side messages -- * other minor changes -- * -- * Revision 1.22 2003/09/22 14:58:33 Rommel -- * added server side progress messages -- * -- * Revision 1.21 2003/08/28 12:44:11 Rommel -- * fixed display of non-k-multiple packet sizes -- * -- * Revision 1.20 2003/08/27 11:05:48 Rommel -- * allow block size specifikation in bytes or k bytes -- * -- * Revision 1.19 2003/08/17 16:53:45 Rommel -- * added Unix/Linux pthreads support (required for UDP) -- * -- * Revision 1.18 2003/08/17 14:46:17 Rommel -- * added UDP benchmark -- * several minor changes (cleanup) -- * configurable binding address -- * -- * Revision 1.17 2003/07/12 17:25:00 Rommel -- * made block size selectable -- * -- * Revision 1.16 2003/02/10 09:06:59 Rommel -- * fixed sender algorithm -- * -- * Revision 1.15 2001/09/17 13:56:40 Rommel -- * changed to perform bidirectional benchmarks -- * -- * Revision 1.14 2001/04/19 12:20:55 Rommel -- * added fixes for Unix systems -- * -- * Revision 1.13 2001/03/26 11:37:41 Rommel -- * avoid integer overflows during throughput calculation -- * -- * Revision 1.12 2000/12/01 15:57:57 Rommel -- * *** empty log message *** -- * -- * Revision 1.11 2000/03/01 12:21:47 rommel -- * fixed _INTEGRAL_MAX_BITS problem for WIN32 -- * -- * Revision 1.10 1999/10/28 17:36:57 rommel -- * fixed OS/2 timer code -- * -- * Revision 1.9 1999/10/28 17:04:12 rommel -- * fixed timer code -- * -- * Revision 1.8 1999/10/24 19:08:20 rommel -- * imported DOS support from G. Vanem -- * -- * -- * Revision 1.8 1999/10/12 11:02:00 giva -- * added Watt-32 with djgpp support. Added debug mode. -- * G. Vanem -- * -- * Revision 1.7 1999/06/13 18:42:25 rommel -- * added Linux port with patches from Detlef Plotzky -- * -- * Revision 1.6 1998/10/12 11:14:58 rommel -- * change to malloc'ed (and tiled) memory for transfer buffers -- * (hint from Guenter Kukkukk ) -- * for increased performance -- * -- * Revision 1.5 1998/07/31 14:15:03 rommel -- * added random buffer data -- * fixed bugs -- * -- * Revision 1.4 1997/09/12 17:35:04 rommel -- * termination bug fixes -- * -- * Revision 1.3 1997/09/12 12:00:15 rommel -- * added Win32 port -- * (tested for Windows NT only) -- * -- * Revision 1.2 1997/09/12 10:44:22 rommel -- * added TCP/IP and a command line interface -- * -- * Revision 1.1 1996/09/25 08:42:29 rommel -- * Initial revision -- * -- */ -- --#ifdef WIN32 --#define _INTEGRAL_MAX_BITS 64 --#endif -- --#include --#include --#include --#include --#include --#if defined(UNIX) || defined(DJGPP) --#include --#include --#include --#else --#include --#include "getopt.h" --#endif -- --#define DEFAULTPORT 0x494F /* "IO" */ --#define DEFAULTNBSRV "NETIOSRV" --#define DEFAULTNBCLT "NETIOCLT" --#define THREADSTACK 65536 -- --/* TCP/IP system specific details */ -- --#ifdef OS2 -- --#define BSD_SELECT --#include --#include --#include --#include --#include --#include -- --#ifdef __IBMC__ --#define newthread(entry) (_beginthread(entry, 0, THREADSTACK, 0) == -1) --#else --#define newthread(entry) (_beginthread(entry, THREADSTACK, 0) == -1) --#endif --#define THREAD void --#define THREADRESULT -- --#endif /* OS2 */ -- --#ifdef WATT32 -- --#include /* sock_init() etc. */ --#include --#include --#include --#define soclose close_s --#define select select_s --#define psock_errno perror -- --#endif /* WATT32 */ -- --#ifdef WIN32 -- --#include --#include --#define soclose closesocket -- --int sock_init(void) --{ -- WSADATA wsaData; -- return WSAStartup(MAKEWORD(1, 1), &wsaData); --} -- --void psock_errno(char *text) --{ -- int rc = WSAGetLastError(); -- printf("%s: error code %d\n", text, rc); --} -- --#ifdef __IBMC__ --#define newthread(entry) (_beginthread(entry, 0, THREADSTACK, 0) == -1) --#else --#define newthread(entry) (_beginthread(entry, THREADSTACK, 0) == -1) --#endif --#define THREAD void --#define THREADRESULT -- --#endif /* WIN32 */ -- --#ifdef UNIX -- --#include --#include --#include --#include --#include --#include -- --#define psock_errno(x) perror(x) --#define soclose(x) close(x) -- --int sock_init(void) --{ -- return 0; --} -- --#include --pthread_t thread; --#define newthread(entry) (pthread_create(&thread, 0, entry, 0) != 0) --#define THREAD void* --#define THREADRESULT ((void*)0) -- --#endif /* UNIX */ -- --#ifdef SOCKLEN_T --typedef socklen_t socklen_type; --#else --typedef size_t socklen_type; --#endif -- --/* global data */ -- --#ifndef max --#define max(x, y) ((x) > (y) ? (x) : (y)) --#endif -- --#ifndef min --#define min(x, y) ((x) < (y) ? (x) : (y)) --#endif -- --#ifndef EINTR --#define EINTR 0 --#endif -- --int nSizes[] = {1024, 2048, 4096, 8192, 16384, 32768}; --size_t nnSizes = sizeof(nSizes) / sizeof(int); --#define NMAXSIZE 65536 -- --int tSizes[] = {1024, 2048, 4096, 8192, 16384, 32767}; --size_t ntSizes = sizeof(tSizes) / sizeof(int); --#define TMAXSIZE 65536 -- --#define INTERVAL 6 -- --/* you may need to adapt this to your platform/compiler */ --typedef unsigned int uint32; -- --typedef struct --{ -- uint32 cmd; -- uint32 data; --} --CONTROL; -- --#define CMD_QUIT 0 --#define CMD_C2S 1 --#define CMD_S2C 2 --#define CMD_RES 3 -- --#define CTLSIZE sizeof(CONTROL) -- --/* timer code */ -- --int bTimeOver; -- --#ifdef OS2 -- --#define INCL_DOS --#define INCL_NOPM --#include -- --typedef QWORD TIMER; -- --void APIENTRY TimerThread(ULONG nSeconds) --{ -- HEV hSem; -- HTIMER hTimer; -- -- DosCreateEventSem(0, &hSem, DC_SEM_SHARED, 0); -- -- DosAsyncTimer(nSeconds * 1000, (HSEM) hSem, &hTimer); -- DosWaitEventSem(hSem, SEM_INDEFINITE_WAIT); -- DosStopTimer(hTimer); -- -- DosCloseEventSem(hSem); -- -- bTimeOver = 1; -- -- DosExit(EXIT_THREAD, 0); --} -- --int StartAlarm(long nSeconds) --{ -- TID ttid; -- -- bTimeOver = 0; -- -- if (DosCreateThread(&ttid, TimerThread, nSeconds, 0, THREADSTACK)) -- return printf("Cannot create timer thread.\n"), -1; -- -- return 0; --} -- --int StartTimer(TIMER *nStart) --{ -- if (DosTmrQueryTime(nStart)) -- return printf("Timer error.\n"), -1; -- -- return 0; --} -- --long StopTimer(TIMER *nStart, int nAccuracy) --{ -- TIMER nStop; -- ULONG nFreq; -- -- if (DosTmrQueryTime(&nStop)) -- return printf("Timer error.\n"), -1; -- if (DosTmrQueryFreq(&nFreq)) -- return printf("Timer error.\n"), -1; -- -- nFreq = (nFreq + nAccuracy / 2) / nAccuracy; -- -- return (* (long long *) &nStop - * (long long *) nStart) / nFreq; --} -- --#endif /* OS2 */ -- --#ifdef WIN32 -- --typedef LARGE_INTEGER TIMER; -- --#define sleep(x) Sleep((x) * 1000); -- --DWORD CALLBACK TimerThread(void *pArg) --{ -- long nSeconds = * (long *) pArg; -- -- Sleep(nSeconds * 1000); -- bTimeOver = 1; -- -- return 0; --} -- --int StartAlarm(long nSeconds) --{ -- static long sSeconds; -- DWORD ttid; -- -- sSeconds = nSeconds; -- -- bTimeOver = 0; -- -- if (CreateThread(0, THREADSTACK, TimerThread, (void *) &sSeconds, 0, &ttid) == NULL) -- return printf("Cannot create timer thread.\n"), -1; -- -- return 0; --} -- --int StartTimer(TIMER *nStart) --{ -- if (!QueryPerformanceCounter(nStart)) -- return printf("Timer error.\n"), -1; -- -- return 0; --} -- --long StopTimer(TIMER *nStart, int nAccuracy) --{ -- TIMER nStop, nFreq; -- -- if (!QueryPerformanceCounter(&nStop)) -- return printf("Timer error.\n"), -1; -- if (!QueryPerformanceFrequency(&nFreq)) -- return printf("Timer error.\n"), -1; -- -- nFreq.QuadPart = (nFreq.QuadPart + nAccuracy / 2) / nAccuracy; -- -- return (nStop.QuadPart - nStart->QuadPart) / nFreq.QuadPart; --} -- --#endif /* WIN32 */ -- --#if defined(UNIX) || defined(DJGPP) -- --typedef struct timeval TIMER; -- --void on_alarm(int signum) --{ -- alarm(0); -- bTimeOver = 1; --} -- --int StartAlarm(long nSeconds) --{ -- bTimeOver = 0; -- signal(SIGALRM, on_alarm); -- alarm(nSeconds); -- return 0; --} -- --int StartTimer(TIMER *nStart) --{ -- struct timezone tz = {0, 0}; -- -- gettimeofday(nStart, &tz); -- -- return 0; --} -- --long StopTimer(TIMER *nStart, int nAccuracy) --{ -- struct timezone tz = {0, 0}; -- TIMER nStop; -- -- gettimeofday(&nStop, &tz); -- -- return (nStop.tv_sec - nStart->tv_sec) * nAccuracy -- + (nStop.tv_usec - nStart->tv_usec) * nAccuracy / 1000000; --} -- --#endif /* UNIX || DJGPP */ -- --/* initialize data to transfer */ -- --void GenerateRandomData(char *cBuffer, size_t nSize) --{ -- if (cBuffer != NULL) -- { -- size_t i; -- -- cBuffer[0] = 0; -- srand(time(NULL)); -- -- for (i = 1; i < nSize; i++) -- cBuffer[i] = (char) rand(); -- } --} -- --char *InitBuffer(size_t nSize) --{ -- char *cBuffer = malloc(nSize); -- GenerateRandomData(cBuffer, nSize); -- return cBuffer; --} -- --char *PacketSize(int nSize) --{ -- static char szBuffer[64]; -- -- if ((nSize % 1024) == 0 || (nSize % 1024) == 1023) -- sprintf(szBuffer, "%2dk", (nSize + 512) / 1024); -- else -- sprintf(szBuffer, "%d", nSize); -- -- return szBuffer; --} -- --/* print results */ -- --typedef enum {nf_auto, nf_bytes, nf_kbytes, nf_mbytes, nf_gbytes} numberformat; --numberformat nFormat = nf_auto; -- --void print_result(long long nData, long nTime) --{ -- numberformat nThisFormat = nFormat; -- double nResult; -- -- if (nThisFormat == nf_auto) -- { -- if (nData < 10 * 1024 * INTERVAL) -- nThisFormat = nf_bytes; -- else if (nData < 10 * 1024 * 1024 * INTERVAL) -- nThisFormat = nf_kbytes; -- else if (nData < (long long) 1024 * 1024 * 1024 * INTERVAL) -- nThisFormat = nf_mbytes; -- else -- nThisFormat = nf_gbytes; -- } -- -- switch(nThisFormat) -- { -- case nf_bytes: -- nResult = (double) nData * 1024 / nTime; -- printf(" %0.0f Byte/s", nResult); -- break; -- -- case nf_kbytes: -- nResult = (double) nData / nTime; -- printf(" %0.2f KByte/s", nResult); -- break; -- -- case nf_mbytes: -- nResult = (double) nData / nTime / 1024; -- printf(" %0.2f MByte/s", nResult); -- break; -- -- case nf_gbytes: -- nResult = (double) nData / nTime / 1024 / 1024; -- printf(" %0.3f GByte/s", nResult); -- break; -- } --} -- --/* TCP/IP code */ -- --int send_data(int socket, void *buffer, size_t size, int flags) --{ -- int rc = send(socket, buffer, size, flags); -- -- if (rc < 0) -- { -- psock_errno("send()"); -- return -1; -- } -- -- if (rc != size) -- return 1; -- -- return 0; --} -- --int recv_data(int socket, void *buffer, size_t size, int flags) --{ -- size_t rc = recv(socket, buffer, size, flags); -- -- if (rc < 0) -- { -- psock_errno("recv()"); -- return -1; -- } -- -- if (rc != size) -- return 1; -- -- return 0; --} -- --const int sobufsize = 131072; --int nPort = DEFAULTPORT; --int nAuxPort = DEFAULTPORT + 1; --struct in_addr addr_server; --struct in_addr addr_local; -- --int udpsocket, udpd; --unsigned long nUDPCount; --long long nUDPData; -- --THREAD TCP_Server(void *arg) --{ -- char *cBuffer; -- CONTROL ctl; -- TIMER nTimer; -- long nTime; -- long long nData; -- struct sockaddr_in sa_server, sa_client; -- int server, client; -- socklen_type length; -- struct timeval tv; -- fd_set fds; -- int rc; -- int nByte; -- -- if ((cBuffer = InitBuffer(TMAXSIZE)) == NULL) -- { -- perror("malloc()"); -- return THREADRESULT; -- } -- -- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0) -- { -- psock_errno("socket()"); -- free(cBuffer); -- return THREADRESULT; -- } -- -- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize)); -- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize)); -- -- sa_server.sin_family = AF_INET; -- sa_server.sin_port = htons(nPort); -- sa_server.sin_addr = addr_local; -- -- if (bind(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0) -- { -- psock_errno("bind()"); -- soclose(server); -- free(cBuffer); -- return THREADRESULT; -- } -- -- if (listen(server, 2) != 0) -- { -- psock_errno("listen()"); -- soclose(server); -- free(cBuffer); -- return THREADRESULT; -- } -- -- for (;;) -- { -- printf("TCP server listening.\n"); -- -- FD_ZERO(&fds); -- FD_SET(server, &fds); -- tv.tv_sec = 3600; -- tv.tv_usec = 0; -- -- if ((rc = select(FD_SETSIZE, &fds, 0, 0, &tv)) < 0) -- { -- psock_errno("select()"); -- break; -- } -- -- if (rc == 0 || FD_ISSET(server, &fds) == 0) -- continue; -- -- length = sizeof(sa_client); -- if ((client = accept(server, (struct sockaddr *) &sa_client, &length)) == -1) -- continue; -- -- setsockopt(client, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize)); -- setsockopt(client, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize)); -- -- printf("TCP connection established ... "); -- fflush(stdout); -- -- for (;;) -- { -- if (recv_data(client, (void *) &ctl, CTLSIZE, 0)) -- break; -- -- ctl.cmd = ntohl(ctl.cmd); -- ctl.data = ntohl(ctl.data); -- -- if (ctl.cmd == CMD_C2S) -- { -- StartTimer(&nTimer); -- -- printf("\nReceiving from client, packet size %s ... ", PacketSize(ctl.data)); -- nData = 0; -- -- do -- { -- for (nByte = 0; nByte < ctl.data; ) -- { -- rc = recv(client, cBuffer + nByte, ctl.data - nByte, 0); -- -- if (rc < 0 && errno != EINTR) -- { -- psock_errno("recv()"); -- break; -- } -- -- if (rc > 0) -- nByte += rc; -- } -- -- nData += ctl.data; -- } -- while (cBuffer[0] == 0 && rc > 0); -- -- if ((nTime = StopTimer(&nTimer, 1024)) != -1) -- print_result(nData, nTime); -- } -- else if (ctl.cmd == CMD_S2C) -- { -- if (StartAlarm(INTERVAL) == 0) -- { -- StartTimer(&nTimer); -- -- printf("\nSending to client, packet size %s ... ", PacketSize(ctl.data)); -- cBuffer[0] = 0; -- nData = 0; -- -- while (!bTimeOver) -- { -- //GenerateRandomData(cBuffer, ctl.data); -- -- for (nByte = 0; nByte < ctl.data; ) -- { -- rc = send(client, cBuffer + nByte, ctl.data - nByte, 0); -- -- if (rc < 0 && errno != EINTR) -- { -- psock_errno("send()"); -- break; -- } -- -- if (rc > 0) -- nByte += rc; -- } -- -- nData += ctl.data; -- } -- -- cBuffer[0] = 1; -- -- if (send_data(client, cBuffer, ctl.data, 0)) -- break; -- -- if ((nTime = StopTimer(&nTimer, 1024)) != -1) -- print_result(nData, nTime); -- } -- } -- else /* quit */ -- break; -- } -- -- printf("\nDone.\n"); -- -- soclose(client); -- -- if (rc < 0) -- break; -- } -- -- soclose(server); -- free(cBuffer); -- -- return THREADRESULT; --} -- --void TCP_Bench(void *arg) --{ -- char *cBuffer; -- CONTROL ctl; -- TIMER nTimer; -- long nTime; -- long long nData; -- int i; -- struct sockaddr_in sa_server, sa_client; -- int server; -- int rc; -- int nByte; -- -- if ((cBuffer = InitBuffer(TMAXSIZE)) == NULL) -- { -- perror("malloc()"); -- return; -- } -- -- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0) -- { -- psock_errno("socket()"); -- free(cBuffer); -- return; -- } -- -- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize)); -- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize)); -- -- sa_client.sin_family = AF_INET; -- sa_client.sin_port = htons(0); -- sa_client.sin_addr = addr_local; -- -- if (bind(server, (struct sockaddr *) &sa_client, sizeof(sa_client)) < 0) -- { -- psock_errno("bind()"); -- soclose(server); -- free(cBuffer); -- return THREADRESULT; -- } -- -- sa_server.sin_family = AF_INET; -- sa_server.sin_port = htons(nPort); -- sa_server.sin_addr = addr_server; -- -- if (connect(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0) -- { -- psock_errno("connect()"); -- soclose(server); -- free(cBuffer); -- return; -- } -- -- printf("\nTCP connection established.\n"); -- -- for (i = 0; i < ntSizes; i++) -- { -- printf("Packet size %s bytes: ", PacketSize(tSizes[i])); -- fflush(stdout); -- -- /* tell the server we will send it data now */ -- -- ctl.cmd = htonl(CMD_C2S); -- ctl.data = htonl(tSizes[i]); -- -- if (send_data(server, (void *) &ctl, CTLSIZE, 0)) -- break; -- -- /* 1 - Tx test */ -- -- if (StartAlarm(INTERVAL) == 0) -- { -- StartTimer(&nTimer); -- nData = 0; -- cBuffer[0] = 0; -- -- while (!bTimeOver) -- { -- //GenerateRandomData(cBuffer, tSizes[i]); -- -- for (nByte = 0; nByte < tSizes[i]; ) -- { -- rc = send(server, cBuffer + nByte, tSizes[i] - nByte, 0); -- -- if (rc < 0 && errno != EINTR) -- { -- psock_errno("send()"); -- break; -- } -- -- if (rc > 0) -- nByte += rc; -- } -- -- nData += tSizes[i]; -- } -- -- if ((nTime = StopTimer(&nTimer, 1024)) == -1) -- printf(" (failed)"); -- else -- print_result(nData, nTime); -- -- printf(" Tx, "); -- fflush(stdout); -- -- cBuffer[0] = 1; -- -- if (send_data(server, cBuffer, tSizes[i], 0)) -- break; -- } -- -- /* tell the server we expect him to send us data now */ -- -- ctl.cmd = htonl(CMD_S2C); -- ctl.data = htonl(tSizes[i]); -- -- if (send_data(server, (void *) &ctl, CTLSIZE, 0)) -- break; -- -- /* 2 - Rx test */ -- -- StartTimer(&nTimer); -- nData = 0; -- -- do -- { -- for (nByte = 0; nByte < tSizes[i]; ) -- { -- rc = recv(server, cBuffer + nByte, tSizes[i] - nByte, 0); -- -- if (rc < 0 && errno != EINTR) -- { -- psock_errno("recv()"); -- break; -- } -- -- if (rc > 0) -- nByte += rc; -- } -- -- nData += tSizes[i]; -- } -- while (cBuffer[0] == 0 && rc > 0); -- -- if ((nTime = StopTimer(&nTimer, 1024)) == -1) -- printf(" (failed)"); -- else -- print_result(nData, nTime); -- -- printf(" Rx.\n"); -- } -- -- ctl.cmd = htonl(CMD_QUIT); -- ctl.data = 0; -- -- send_data(server, (void *) &ctl, CTLSIZE, 0); -- -- printf("Done.\n"); -- -- soclose(server); -- free(cBuffer); --} -- --THREAD UDP_Receiver(void *arg) --{ -- char *cBuffer; -- struct sockaddr_in sa_server, sa_client; -- int rc; -- socklen_type nBytes; -- -- if ((cBuffer = InitBuffer(TMAXSIZE)) == NULL) -- { -- perror("malloc()"); -- return THREADRESULT; -- } -- -- if ((udpsocket = socket(PF_INET, SOCK_DGRAM, 0)) < 0) -- { -- psock_errno("socket(DGRAM)"); -- free(cBuffer); -- return THREADRESULT; -- } -- -- setsockopt(udpsocket, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize)); -- setsockopt(udpsocket, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize)); -- -- sa_server.sin_family = AF_INET; -- sa_server.sin_port = htons(nAuxPort); -- sa_server.sin_addr = addr_local; -- -- if (bind(udpsocket, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0) -- { -- psock_errno("bind(DGRAM)"); -- soclose(udpsocket); -- free(cBuffer); -- return THREADRESULT; -- } -- -- udpd = 1; -- -- for (;;) -- { -- nBytes = sizeof(sa_client); -- rc = recvfrom(udpsocket, cBuffer, TMAXSIZE, 0, (struct sockaddr *) &sa_client, &nBytes); -- -- if (rc < 0 && errno != EINTR) -- psock_errno("recvfrom()"); -- -- if (rc > 0) -- { -- nUDPCount++; -- nUDPData += rc; -- } -- } -- -- soclose(udpsocket); -- free(cBuffer); -- -- return THREADRESULT; --} -- --THREAD UDP_Server(void *arg) --{ -- char *cBuffer; -- CONTROL ctl; -- TIMER nTimer; -- long nTime; -- long long nData; -- struct sockaddr_in sa_server, sa_client; -- int server, client; -- struct timeval tv; -- fd_set fds; -- int rc, nByte; -- socklen_type nLength; -- -- if ((cBuffer = InitBuffer(TMAXSIZE)) == NULL) -- { *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***