diff options
author | Daniel Stenberg <daniel@haxx.se> | 2017-10-10 16:56:35 +0200 |
---|---|---|
committer | Daniel Stenberg <daniel@haxx.se> | 2017-10-14 17:40:12 +0200 |
commit | ad164eceb3ce6721d34a3418e0dacabd4f4ff904 (patch) | |
tree | 7ae3bdc1411b57b96b68a9a0ccef16904ec22c98 /lib | |
parent | 4af3c777a9996f32c5a23db0ecf29996197dfdbc (diff) | |
download | curl-ad164eceb3ce6721d34a3418e0dacabd4f4ff904.tar.gz |
memdebug: trace send, recv and socket
... to allow them to be included in torture tests too.
closes #1980
Diffstat (limited to 'lib')
-rw-r--r-- | lib/memdebug.c | 33 | ||||
-rw-r--r-- | lib/memdebug.h | 10 | ||||
-rw-r--r-- | lib/openldap.c | 4 |
3 files changed, 43 insertions, 4 deletions
diff --git a/lib/memdebug.c b/lib/memdebug.c index 0eb249ce9..8e61aba71 100644 --- a/lib/memdebug.c +++ b/lib/memdebug.c @@ -343,7 +343,12 @@ curl_socket_t curl_socket(int domain, int type, int protocol, "FD %s:%d socket() = %ld\n" : "FD %s:%d socket() = %zd\n"; - curl_socket_t sockfd = socket(domain, type, protocol); + curl_socket_t sockfd; + + if(countcheck("socket", line, source)) + return CURL_SOCKET_BAD; + + sockfd = socket(domain, type, protocol); if(source && (sockfd != CURL_SOCKET_BAD)) curl_memlog(fmt, source, line, sockfd); @@ -351,6 +356,32 @@ curl_socket_t curl_socket(int domain, int type, int protocol, return sockfd; } +ssize_t curl_dosend(int sockfd, const void *buf, size_t len, int flags, + int line, const char *source) +{ + ssize_t rc; + if(countcheck("send", line, source)) + return -1; + rc = send(sockfd, buf, len, flags); + if(source) + curl_memlog("SEND %s:%d send(%zu) = %zd\n", + source, line, len, rc); + return rc; +} + +ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, + int line, const char *source) +{ + ssize_t rc; + if(countcheck("recv", line, source)) + return -1; + rc = recv(sockfd, buf, len, flags); + if(source) + curl_memlog("RECV %s:%d recv(%zu) = %zd\n", + source, line, len, rc); + return rc; +} + #ifdef HAVE_SOCKETPAIR int curl_socketpair(int domain, int type, int protocol, curl_socket_t socket_vector[2], diff --git a/lib/memdebug.h b/lib/memdebug.h index 835dab38c..c6b9225f4 100644 --- a/lib/memdebug.h +++ b/lib/memdebug.h @@ -8,7 +8,7 @@ * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * - * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al. + * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms @@ -66,6 +66,12 @@ CURL_EXTERN int curl_socketpair(int domain, int type, int protocol, int line, const char *source); #endif +/* send/receive sockets */ +CURL_EXTERN ssize_t curl_dosend(int sockfd, const void *buf, size_t len, + int flags, int line, const char *source); +CURL_EXTERN ssize_t curl_dorecv(int sockfd, void *buf, size_t len, int flags, + int line, const char *source); + /* FILE functions */ CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line, const char *source); @@ -84,6 +90,8 @@ CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #define calloc(nbelem,size) curl_docalloc(nbelem, size, __LINE__, __FILE__) #define realloc(ptr,size) curl_dorealloc(ptr, size, __LINE__, __FILE__) #define free(ptr) curl_dofree(ptr, __LINE__, __FILE__) +#define send(a,b,c,d) curl_dosend(a,b,c,d, __LINE__, __FILE__) +#define recv(a,b,c,d) curl_dorecv(a,b,c,d, __LINE__, __FILE__) #ifdef WIN32 # ifdef UNICODE diff --git a/lib/openldap.c b/lib/openldap.c index f2944033b..ac356d098 100644 --- a/lib/openldap.c +++ b/lib/openldap.c @@ -677,7 +677,7 @@ ldapsb_tls_read(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_RECV_ERROR; - ret = li->recv(conn, FIRSTSOCKET, buf, len, &err); + ret = (li->recv)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } @@ -692,7 +692,7 @@ ldapsb_tls_write(Sockbuf_IO_Desc *sbiod, void *buf, ber_len_t len) ber_slen_t ret; CURLcode err = CURLE_SEND_ERROR; - ret = li->send(conn, FIRSTSOCKET, buf, len, &err); + ret = (li->send)(conn, FIRSTSOCKET, buf, len, &err); if(ret < 0 && err == CURLE_AGAIN) { SET_SOCKERRNO(EWOULDBLOCK); } |