[netperf-talk] MingW/gcc patches
Gisle Vanem
giva at bgnett.no
Wed Feb 14 06:17:59 PST 2007
As promised, here are some patches to be able to build using
the superiour MingW + gcc combination on Windows.
The diff-1.txt contains several patches:
* netlib.c: gcc uses 'LL' suffix for unsigned long long types.
MSVC uses 'i64'.
* netlib.c: Fix call to 'GetComputerName()'. (who ever got this through?).
* nettest_bsd.c: Added 'remote_res' and 'local_res'. Winsock never sets
'EAGAIN'. 'unsigned_short' replaced with 'unsigned short' (a typo?).
* netlib.[ch]: Added a function 'set_nonblock()' for the simple task
of setting a socket to non-blocking mode. Use it in nettest_bsd.c,
nettest_ipv6.c and nettest_sctp.c
And yes, Rick, I did have the latest trunk (check the time-stamp of netlib.c).
Patch attached.
--gv
-------------- next part --------------
diff -u3 -Hb -r SVN-Latest/src/netlib.c netlib.c
--- SVN-Latest/src/netlib.c Wed Feb 14 14:25:53 2007
+++ netlib.c Wed Feb 14 14:29:37 2007
@@ -687,10 +687,16 @@
}
#ifdef WIN32
+#ifdef __GNUC__
+ #define S64_SUFFIX(x) x##LL
+#else
+ #define S64_SUFFIX(x) x##i64
+#endif
+
/*
* Number of 100 nanosecond units from 1/1/1601 to 1/1/1970
*/
-#define EPOCH_BIAS 116444736000000000i64
+#define EPOCH_BIAS S64_SUFFIX(116444736000000000)
/*
* Union to facilitate converting from FILETIME to unsigned __int64
@@ -708,9 +714,9 @@
GetSystemTimeAsFileTime( &(nt_time.ft_struct) );
- UnixTime = ((nt_time.ft_scalar - EPOCH_BIAS) / 10i64);
- tv->tv_sec = (long)(time_t)(UnixTime / 1000000i64);
- tv->tv_usec = (unsigned long)(UnixTime % 1000000i64);
+ UnixTime = ((nt_time.ft_scalar - EPOCH_BIAS) / S64_SUFFIX(10));
+ tv->tv_sec = (long)(time_t)(UnixTime / S64_SUFFIX(1000000));
+ tv->tv_usec = (unsigned long)(UnixTime % S64_SUFFIX(1000000));
}
#endif /* WIN32 */
@@ -1982,6 +1988,21 @@
}
+/*
+ * Sets a socket to non-blocking operation.
+ */
+int
+set_nonblock (SOCKET sock)
+{
+#ifdef WIN32
+ unsigned long flags = 1;
+ return (ioctlsocket(sock, FIONBIO, &flags) != SOCKET_ERROR);
+#else
+ return (fcntl(sock, F_SETFL, O_NONBLOCK) != -1);
+#endif
+}
+
+
/***********************************************************************/
/* */
@@ -2765,7 +2786,7 @@
static char id_string[80];
#ifdef WIN32
char system_name[MAX_COMPUTERNAME_LENGTH+1] ;
-int name_len = MAX_COMPUTERNAME_LENGTH + 1 ;
+DWORD name_len = MAX_COMPUTERNAME_LENGTH + 1 ;
#else
struct utsname system_name;
#endif /* WIN32 */
@@ -2773,7 +2794,7 @@
#ifdef WIN32
SYSTEM_INFO SystemInfo;
GetSystemInfo( &SystemInfo ) ;
- if ( !GetComputerName(system_name , &(DWORD)name_len) )
+ if ( !GetComputerName(system_name , &name_len) )
strcpy(system_name , "no_name") ;
#else
if (uname(&system_name) <0) {
diff -u3 -Hb -r SVN-Latest/src/netlib.h netlib.h
--- SVN-Latest/src/netlib.h Wed Feb 14 14:25:53 2007
+++ netlib.h Wed Feb 14 14:30:11 2007
@@ -478,6 +478,8 @@
extern float calibrate_local_cpu(float local_cpu_rate);
extern float calibrate_remote_cpu();
extern void bind_to_specific_processor(int processor_affinity,int use_cpu_map);
+extern int set_nonblock (SOCKET sock);
+
#ifndef WIN32
/* WIN32 requires that at least one of the file sets to select be
diff -u3 -Hb -r SVN-Latest/src/nettest_bsd.c nettest_bsd.c
--- SVN-Latest/src/nettest_bsd.c Sun Feb 11 15:53:55 2007
+++ nettest_bsd.c Tue Feb 13 17:13:38 2007
@@ -10070,6 +10070,9 @@
struct tcp_rr_response_struct *tcp_rr_response;
struct tcp_rr_results_struct *tcp_rr_result;
+ struct addrinfo *remote_res;
+ struct addrinfo *local_res;
+
tcp_rr_request =
(struct tcp_rr_request_struct *)netperf_request.content.test_specific_data;
tcp_rr_response=
@@ -10251,8 +10254,8 @@
}
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(send_socket, F_SETFL, O_NONBLOCK) == -1) {
- perror("netperf: fcntl");
+ if (!set_nonblock(send_socket) {
+ perror("netperf: set_nonblock");
exit(1);
}
@@ -10341,10 +10344,12 @@
timed_out = 1;
break;
}
+#ifndef WIN32
else if (errno == EAGAIN) {
Set_errno(0);
continue;
}
+#endif
else {
perror("send_tcp_nbrr: data recv error");
exit(1);
@@ -10723,7 +10728,7 @@
sizeof(myaddr_in));
myaddr_in.sin_family = AF_INET;
myaddr_in.sin_addr.s_addr = INADDR_ANY;
- myaddr_in.sin_port = htons((unsigned_short)tcp_rr_request->port);
+ myaddr_in.sin_port = htons((unsigned short)tcp_rr_request->port);
/* Grab a socket to listen on, and then listen on it. */
@@ -10857,7 +10862,7 @@
#endif /* KLUDGE_SOCKET_OPTIONS */
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(s_data, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(s_data)) {
close(s_data);
exit(1);
}
diff -u3 -Hb -r SVN-Latest/src/nettest_ipv6.c nettest_ipv6.c
--- SVN-Latest/src/nettest_ipv6.c Sun Feb 11 15:53:56 2007
+++ nettest_ipv6.c Tue Feb 13 17:15:51 2007
@@ -6739,8 +6739,8 @@
}
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(send_socket, F_SETFL, O_NONBLOCK) == -1) {
- perror("netperf: fcntl");
+ if (!set_nonblock)) {
+ perror("netperf: set_nonblock");
exit(1);
}
@@ -7351,7 +7351,7 @@
}
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(s_data, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(s_data)) {
close(s_data);
exit(1);
}
diff -u3 -Hb -r SVN-Latest/src/nettest_sctp.c nettest_sctp.c
--- SVN-Latest/src/nettest_sctp.c Sun Feb 11 15:53:55 2007
+++ nettest_sctp.c Tue Feb 13 17:19:31 2007
@@ -617,7 +617,7 @@
if (non_block) {
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(send_socket, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(send_socket)) {
perror("netperf: fcntl");
exit(1);
}
@@ -1281,7 +1281,7 @@
if (non_block) {
fprintf(where, "setting socket as nonblocking\n");
fflush(where);
- if (fcntl(s_data, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(s_data)) {
close(s_data);
exit(1);
}
@@ -1759,7 +1759,7 @@
if (non_block) {
/* now that we are connected, mark the socket as non-blocking */
- if (fcntl(send_socket[j], F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(send_socket[j])) {
perror("netperf: fcntl");
exit(1);
}
@@ -2429,7 +2429,7 @@
/* now that we are connected, mark the socket as non-blocking */
if (non_block) {
- if (fcntl(s_recv, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(s_recv)) {
close(s_recv);
exit(1);
}
@@ -2829,7 +2829,7 @@
/* set non-blocking if needed */
if (non_block) {
- if (fcntl(send_socket, F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(send_socket)) {
close(send_socket);
exit(1);
}
@@ -3450,8 +3450,8 @@
/* now that we are connected, mark the socket as non-blocking */
if (non_block) {
- if (fcntl(s_data, F_SETFL, O_NONBLOCK) == -1) {
- perror("netperf: fcntl");
+ if (!set_nonblock(s_data)) {
+ perror("netperf: set_nonblock");
exit(1);
}
}
@@ -3888,7 +3888,7 @@
sctp_enable_events(send_socket[j], 0);
if (non_block) {
- if (fcntl(send_socket[j], F_SETFL, O_NONBLOCK) == -1) {
+ if (!set_nonblock(send_socket[j])) {
close(send_socket[j]);
exit(1);
}
@@ -4492,8 +4492,8 @@
/* now that we are connected, mark the socket as non-blocking */
if (non_block) {
- if (fcntl(s_rcv, F_SETFL, O_NONBLOCK) == -1) {
- perror("netperf: fcntl");
+ if (!set_nonblock(s_rcv)) {
+ perror("netperf: set_nonblock");
exit(1);
}
}
More information about the netperf-talk
mailing list