| /* iperf_util.c |
| * |
| * Iperf utility functions |
| * |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <string.h> |
| #include <sys/select.h> |
| #include <errno.h> |
| |
| #include "config.h" |
| |
| /* XXX: this code is not portable: not all versions of linux install libuuidgen |
| * by default |
| * |
| * if not installed, may need to do something like this: |
| * yum install libuuid-devel |
| * apt-get install uuid-dev |
| */ |
| |
| #if defined(HAVE_UUID_H) |
| #warning DOING SOMETHING |
| #include <uuid.h> |
| #elif defined(HAVE_UUID_UUID_H) |
| #include <uuid/uuid.h> |
| #else |
| #error No uuid header file specified |
| #endif |
| |
| |
| |
| /* get_uuid |
| * |
| * Generate and return a UUID string |
| * |
| * Iperf uses this function to create test "cookies" which |
| * server as unique test identifiers. These cookies are also |
| * used for the authentication of stream connections. |
| */ |
| |
| void |
| get_uuid(char *temp) |
| { |
| char *s; |
| uuid_t uu; |
| |
| #if defined(HAVE_UUID_CREATE) |
| uuid_create(&uu, NULL); |
| uuid_to_string(&uu, &s, 0); |
| #elif defined(HAVE_UUID_GENERATE) |
| s = (char *) malloc(37); |
| uuid_generate(uu); |
| uuid_unparse(uu, s); |
| #else |
| #error No uuid function specified |
| #endif |
| memcpy(temp, s, 37); |
| |
| // XXX: Freeing s only works if you HAVE_UUID_GENERATE |
| // Otherwise use rpc_string_free (?) |
| free(s); |
| } |
| |
| |
| /* is_closed |
| * |
| * Test if the file descriptor fd is closed. |
| * |
| * Iperf uses this function to test whether a TCP stream socket |
| * is closed, because accepting and denying an invalid connection |
| * in iperf_tcp_accept is not considered an error. |
| */ |
| |
| int |
| is_closed(int fd) |
| { |
| struct timeval tv; |
| fd_set readset; |
| |
| FD_ZERO(&readset); |
| FD_SET(fd, &readset); |
| tv.tv_sec = 0; |
| tv.tv_usec = 0; |
| |
| if (select(fd+1, &readset, NULL, NULL, &tv) < 0) { |
| if (errno == EBADF) |
| return (1); |
| } |
| return (0); |
| } |