svn commit: r381939 - in head/benchmarks/netio: . files
Bartek Rutkowski
robak at FreeBSD.org
Sun Mar 22 17:28:29 UTC 2015
Author: robak
Date: Sun Mar 22 17:28:27 2015
New Revision: 381939
URL: https://svnweb.freebsd.org/changeset/ports/381939
QAT: https://qat.redports.org/buildarchive/r381939/
Log:
benchmarks/netio: update 1.26 -> 1.32
- Fix clang build issues
- Maintainer's timeout (arved at FreeBSD.org)
PR: 181789
Submitted by: Pawel Biernacki <pawel.biernacki at gmail.com>
Modified:
head/benchmarks/netio/Makefile
head/benchmarks/netio/distinfo
head/benchmarks/netio/files/patch-netio.c
Modified: head/benchmarks/netio/Makefile
==============================================================================
--- head/benchmarks/netio/Makefile Sun Mar 22 17:12:13 2015 (r381938)
+++ head/benchmarks/netio/Makefile Sun Mar 22 17:28:27 2015 (r381939)
@@ -2,11 +2,11 @@
# $FreeBSD$
PORTNAME= netio
-PORTVERSION= 1.26
+PORTVERSION= 1.32
CATEGORIES= benchmarks net ipv6
MASTER_SITES= ${MASTER_SITE_LOCAL}
MASTER_SITE_SUBDIR= arved
-DISTNAME= netio126
+DISTNAME= netio132
MAINTAINER= arved at FreeBSD.org
COMMENT= Network benchmark
@@ -15,7 +15,7 @@ WRKSRC= ${WRKDIR}
USES= gmake zip
PLIST_FILES= bin/netio
-CFLAGS+= -DUNIX
+CFLAGS+= -DUNIX -DSOCKLEN_T
LIBS+= -pthread
MAKE_ENV+= OUT=-o
Modified: head/benchmarks/netio/distinfo
==============================================================================
--- head/benchmarks/netio/distinfo Sun Mar 22 17:12:13 2015 (r381938)
+++ head/benchmarks/netio/distinfo Sun Mar 22 17:28:27 2015 (r381939)
@@ -1,2 +1,2 @@
-SHA256 (netio126.zip) = 86c0bdee3224477b43c0cb6161ce1a20b2a2b6d59ef37f67864227096d9e8d5c
-SIZE (netio126.zip) = 140402
+SHA256 (netio132.zip) = c21550dfac6634558a7a79957eed28c46c62e0543017ef9d5c97c49f3cd41ddd
+SIZE (netio132.zip) = 162484
Modified: head/benchmarks/netio/files/patch-netio.c
==============================================================================
--- head/benchmarks/netio/files/patch-netio.c Sun Mar 22 17:12:13 2015 (r381938)
+++ head/benchmarks/netio/files/patch-netio.c Sun Mar 22 17:28:27 2015 (r381939)
@@ -1,282 +1,3126 @@
---- netio.c.orig Tue Aug 30 16:47:18 2005
-+++ netio.c Sat Sep 2 13:46:50 2006
-@@ -782,8 +782,13 @@
- const int sobufsize = 131072;
- int nPort = DEFAULTPORT;
- int nAuxPort = DEFAULTPORT + 1;
-+#ifdef USE_IPV6
-+struct in6_addr addr_server;
-+struct in6_addr addr_local;
-+#else
- struct in_addr addr_server;
- struct in_addr addr_local;
-+#endif
-
- int udpsocket, udpd;
- unsigned long nUDPCount;
-@@ -794,7 +799,11 @@
- char *cBuffer;
- CONTROL ctl;
- long long nData;
-+#ifdef USE_IPV6
-+ struct sockaddr_in6 sa_server, sa_client;
-+#else
- struct sockaddr_in sa_server, sa_client;
-+#endif
- int server, client;
- size_t length;
- struct timeval tv;
-@@ -808,7 +817,11 @@
- return THREADRESULT;
- }
-
-+#ifdef USE_IPV6
-+ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0)
-+#else
- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0)
-+#endif
- {
- psock_errno("socket()");
- free(cBuffer);
-@@ -818,10 +831,15 @@
- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize));
- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize));
-
-+#ifdef USE_IPV6
-+ sa_server.sin6_family = AF_INET6;
-+ sa_server.sin6_port = htons(nPort);
-+ sa_server.sin6_addr = addr_local;
-+#else
- sa_server.sin_family = AF_INET;
- sa_server.sin_port = htons(nPort);
- sa_server.sin_addr = addr_local;
--
-+#endif
- if (bind(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0)
- {
- psock_errno("bind()");
-@@ -958,7 +976,11 @@
- long nTime, nResult;
- long long nData;
- int i;
-+#ifdef USE_IPV6
-+ struct sockaddr_in6 sa_server;
-+#else
- struct sockaddr_in sa_server;
-+#endif
- int server;
- int rc;
- int nByte;
-@@ -969,7 +991,11 @@
- return;
- }
-
-+#ifdef USE_IPV6
-+ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0)
-+#else
- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0)
-+#endif
- {
- psock_errno("socket()");
- free(cBuffer);
-@@ -979,9 +1005,16 @@
- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize));
- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize));
-
-+#ifdef USE_IPV6
-+ sa_server.sin6_family = AF_INET6;
-+ sa_server.sin6_port = htons(nPort);
-+ sa_server.sin6_addr = addr_server;
-+
-+#else
- sa_server.sin_family = AF_INET;
- sa_server.sin_port = htons(nPort);
- sa_server.sin_addr = addr_server;
-+#endif
-
- if (connect(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0)
- {
-@@ -1121,7 +1154,11 @@
- THREAD UDP_Receiver(void *arg)
- {
- char *cBuffer;
-+#ifdef USE_IPV6
-+ struct sockaddr_in6 sa_server, sa_client;
-+#else
- struct sockaddr_in sa_server, sa_client;
-+#endif
- int rc;
- size_t nBytes;
-
-@@ -1131,7 +1168,11 @@
- return THREADRESULT;
- }
-
-+#ifdef USE_IPV6
-+ if ((udpsocket = socket(PF_INET6, SOCK_DGRAM, 0)) < 0)
-+#else
- if ((udpsocket = socket(PF_INET, SOCK_DGRAM, 0)) < 0)
-+#endif
- {
- psock_errno("socket(DGRAM)");
- free(cBuffer);
-@@ -1141,9 +1182,15 @@
- setsockopt(udpsocket, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize));
- setsockopt(udpsocket, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize));
-
-+#ifdef USE_IPV6
-+ sa_server.sin6_family = AF_INET6;
-+ sa_server.sin6_port = htons(nAuxPort);
-+ sa_server.sin6_addr = addr_local;
-+#else
- sa_server.sin_family = AF_INET;
- sa_server.sin_port = htons(nAuxPort);
- sa_server.sin_addr = addr_local;
-+#endif
-
- if (bind(udpsocket, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0)
- {
-@@ -1181,7 +1228,11 @@
- char *cBuffer;
- CONTROL ctl;
- long long nData;
-+#ifdef USE_IPV6
-+ struct sockaddr_in6 sa_server, sa_client;
-+#else
- struct sockaddr_in sa_server, sa_client;
-+#endif
- int server, client;
- struct timeval tv;
- fd_set fds;
-@@ -1194,7 +1245,11 @@
- return THREADRESULT;
- }
-
-+#ifdef USE_IPV6
-+ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0)
-+#else
- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0)
-+#endif
- {
- psock_errno("socket(STREAM)");
- free(cBuffer);
-@@ -1204,9 +1259,15 @@
- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize));
- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize));
-
-+#ifdef USE_IPV6
-+ sa_server.sin6_family = AF_INET6;
-+ sa_server.sin6_port = htons(nAuxPort);
-+ sa_server.sin6_addr = addr_local;
-+#else
- sa_server.sin_family = AF_INET;
- sa_server.sin_port = htons(nAuxPort);
- sa_server.sin_addr = addr_local;
-+#endif
-
- if (bind(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0)
- {
-@@ -1252,7 +1313,11 @@
- printf("UDP connection established ... ");
- fflush(stdout);
-
-+#ifdef USE_IPV6
-+ sa_client.sin6_port = htons(nAuxPort);
-+#else
- sa_client.sin_port = htons(nAuxPort);
-+#endif
-
- for (;;)
- {
-@@ -1345,7 +1410,11 @@
- long nTime, nResult, nCount;
- long long nData;
- int i;
-+#ifdef USE_IPV6
-+ struct sockaddr_in6 sa_server;
-+#else
- struct sockaddr_in sa_server;
-+#endif
- int server;
- int rc, nByte;
-
-@@ -1355,7 +1424,11 @@
- return;
- }
-
-+#ifdef USE_IPV6
-+ if ((server = socket(PF_INET6, SOCK_STREAM, 0)) < 0)
-+#else
- if ((server = socket(PF_INET, SOCK_STREAM, 0)) < 0)
-+#endif
- {
- psock_errno("socket()");
- free(cBuffer);
-@@ -1365,9 +1438,15 @@
- setsockopt(server, SOL_SOCKET, SO_RCVBUF, (char *) &sobufsize, sizeof(sobufsize));
- setsockopt(server, SOL_SOCKET, SO_SNDBUF, (char *) &sobufsize, sizeof(sobufsize));
-
-+#ifdef USE_IPV6
-+ sa_server.sin6_family = AF_INET6;
-+ sa_server.sin6_port = htons(nAuxPort);
-+ sa_server.sin6_addr = addr_server;
-+#else
- sa_server.sin_family = AF_INET;
- sa_server.sin_port = htons(nAuxPort);
- sa_server.sin_addr = addr_server;
-+#endif
-
- if (connect(server, (struct sockaddr *) &sa_server, sizeof(sa_server)) < 0)
- {
-@@ -1669,17 +1748,29 @@
- return psock_errno("sock_init()"), 1;
-
- if (szLocal == 0)
-+#ifdef USE_IPV6
-+ addr_local = in6addr_any;
-+#else
- addr_local.s_addr = INADDR_ANY;
-+#endif
- else
- {
- if (isdigit(*szLocal))
-+#ifdef USE_IPV6
-+ inet_pton(AF_INET6, szLocal, &addr_local);
-+#else
- addr_local.s_addr = inet_addr(szLocal);
-+#endif
- else
- {
- if ((host = gethostbyname(szLocal)) == NULL)
- return psock_errno("gethostbyname()"), 1;
-
-+#ifdef USE_IPV6
-+ addr_local = * (struct in6_addr *) (host->h_addr);
-+#else
- addr_local = * (struct in_addr *) (host->h_addr);
-+#endif
- }
- }
-
-@@ -1689,13 +1780,21 @@
- usage();
-
- if (isdigit(*argv[optind]))
-+#ifdef USE_IPV6
-+ inet_pton(AF_INET6, argv[optind], &addr_server);
-+#else
- addr_server.s_addr = inet_addr(argv[optind]);
-+#endif
- else
- {
- if ((host = gethostbyname(argv[optind])) == NULL)
- return psock_errno("gethostbyname()"), 1;
-
-+#ifdef USE_IPV6
-+ addr_server = * (struct in6_addr *) (host->h_addr);
-+#else
- addr_server = * (struct in_addr *) (host->h_addr);
-+#endif
- }
- }
- }
+--- 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 <rommel at ars.de>
+- * 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 <giva at bgnett.no>
+- *
+- *
+- * Revision 1.8 1999/10/12 11:02:00 giva
+- * added Watt-32 with djgpp support. Added debug mode.
+- * G. Vanem <giva at bgnett.no>
+- *
+- * Revision 1.7 1999/06/13 18:42:25 rommel
+- * added Linux port with patches from Detlef Plotzky <plo at bvu.de>
+- *
+- * Revision 1.6 1998/10/12 11:14:58 rommel
+- * change to malloc'ed (and tiled) memory for transfer buffers
+- * (hint from Guenter Kukkukk <kukuk at berlin.snafu.de>)
+- * 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 <stdio.h>
+-#include <stdlib.h>
+-#include <string.h>
+-#include <ctype.h>
+-#include <signal.h>
+-#if defined(UNIX) || defined(DJGPP)
+-#include <sys/time.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#else
+-#include <process.h>
+-#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 <types.h>
+-#include <netinet/in.h>
+-#include <sys/select.h>
+-#include <sys/socket.h>
+-#include <sys/time.h>
+-#include <netdb.h>
+-
+-#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 <tcp.h> /* sock_init() etc. */
+-#include <netinet/in.h>
+-#include <sys/socket.h>
+-#include <netdb.h>
+-#define soclose close_s
+-#define select select_s
+-#define psock_errno perror
+-
+-#endif /* WATT32 */
+-
+-#ifdef WIN32
+-
+-#include <windows.h>
+-#include <winsock.h>
+-#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 <sys/types.h>
+-#include <sys/socket.h>
+-#include <sys/time.h>
+-#include <time.h>
+-#include <netinet/in.h>
+-#include <netdb.h>
+-
+-#define psock_errno(x) perror(x)
+-#define soclose(x) close(x)
+-
+-int sock_init(void)
+-{
+- return 0;
+-}
+-
+-#include <pthread.h>
+-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 <os2.h>
+-
+-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;
*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
More information about the svn-ports-all
mailing list