Merge lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached into lp:libmemcached/1.0

Proposed by Massive Media
Status: Merged
Merged at revision: 1180
Proposed branch: lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached
Merge into: lp:libmemcached/1.0
Diff against target: 89 lines (+27/-3)
3 files modified
libmemcached-1.0/server.h (+3/-0)
libmemcached/io.cc (+6/-3)
libmemcached/server.cc (+18/-0)
To merge this branch: bzr merge lp:~493pocbrcycmdw7yksonho9o2qzz-o18bz-d18ecat4t1b76tkfi3vttrkfngli/libmemcached/libmemcached
Reviewer Review Type Date Requested Status
Tangent Trunk Pending
Review via email: mp+195879@code.launchpad.net

Description of the change

Added the ability to get the local port of a memcache_instance_st.
Sometimes when you're hunting bugs on a production webserver (with multiple workers) you want to tcpdump and see what's going on.
This patch adds the memcached_server_srcport method to the library which returns the local sourceport of the connection (if there's a connection).
We use it a lot.

To post a comment you must log in.
1174. By nicolas

Small bugfixes for errno (since memcached_quit_server() modifies errno)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'libmemcached-1.0/server.h'
2--- libmemcached-1.0/server.h 2013-03-31 23:24:29 +0000
3+++ libmemcached-1.0/server.h 2013-11-20 14:41:51 +0000
4@@ -104,6 +104,9 @@
5 in_port_t memcached_server_port(const memcached_instance_st * self);
6
7 LIBMEMCACHED_API
8+in_port_t memcached_server_srcport(const memcached_instance_st * self);
9+
10+LIBMEMCACHED_API
11 void memcached_instance_next_retry(const memcached_instance_st * self, const time_t absolute_time);
12
13 LIBMEMCACHED_API
14
15=== modified file 'libmemcached/io.cc'
16--- libmemcached/io.cc 2013-11-04 11:17:45 +0000
17+++ libmemcached/io.cc 2013-11-20 14:41:51 +0000
18@@ -342,6 +342,7 @@
19 }
20
21 ssize_t sent_length= ::send(instance->fd, local_write_ptr, write_length, flags);
22+ int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
23
24 if (sent_length == SOCKET_ERROR)
25 {
26@@ -381,14 +382,14 @@
27 }
28
29 memcached_quit_server(instance, true);
30- error= memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);
31+ error= memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
32 return false;
33 }
34 case ENOTCONN:
35 case EPIPE:
36 default:
37 memcached_quit_server(instance, true);
38- error= memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);
39+ error= memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
40 WATCHPOINT_ASSERT(instance->fd == INVALID_SOCKET);
41 return false;
42 }
43@@ -422,6 +423,8 @@
44 do
45 {
46 data_read= ::recv(instance->fd, instance->read_buffer, MEMCACHED_MAX_BUFFER, MSG_NOSIGNAL);
47+ int local_errno= get_socket_errno(); // We cache in case memcached_quit_server() modifies errno
48+
49 if (data_read == SOCKET_ERROR)
50 {
51 switch (get_socket_errno())
52@@ -460,7 +463,7 @@
53 case ECONNREFUSED:
54 default:
55 memcached_quit_server(instance, true);
56- memcached_set_errno(*instance, get_socket_errno(), MEMCACHED_AT);
57+ memcached_set_errno(*instance, local_errno, MEMCACHED_AT);
58 break;
59 }
60
61
62=== modified file 'libmemcached/server.cc'
63--- libmemcached/server.cc 2013-03-31 23:24:29 +0000
64+++ libmemcached/server.cc 2013-11-20 14:41:51 +0000
65@@ -213,6 +213,24 @@
66 return self->port();
67 }
68
69+in_port_t memcached_server_srcport(const memcached_instance_st * self)
70+{
71+ WATCHPOINT_ASSERT(self);
72+ if (self == NULL || self->fd == INVALID_SOCKET || (self->type != MEMCACHED_CONNECTION_TCP && self->type != MEMCACHED_CONNECTION_UDP))
73+ {
74+ return 0;
75+ }
76+
77+ struct sockaddr_in sin;
78+ socklen_t addrlen= sizeof(sin);
79+ if (getsockname(self->fd, (struct sockaddr*)&sin, &addrlen) != -1)
80+ {
81+ return ntohs(sin.sin_port);
82+ }
83+
84+ return -1;
85+}
86+
87 uint32_t memcached_server_response_count(const memcached_instance_st * self)
88 {
89 WATCHPOINT_ASSERT(self);

Subscribers

People subscribed via source and target branches

to all changes: