Looks good, thanks. Ethan
On Mon, Feb 27, 2012 at 11:17, Ben Pfaff <b...@nicira.com> wrote: > There's no reason for a Unix domain client socket to bind a name. I don't > know why we've always done that. Stevens's "Unix Network Programming" > Unix domain socket client example doesn't do a bind. > > Removes the 'unlink_path' parameter from new_fd_stream() since it is now > always passed as NULL. > > Signed-off-by: Ben Pfaff <b...@nicira.com> > --- > lib/stream-fd.c | 10 ++-------- > lib/stream-fd.h | 4 ++-- > lib/stream-tcp.c | 4 ++-- > lib/stream-unix.c | 19 +++++-------------- > python/ovs/stream.py | 18 +++++------------- > 5 files changed, 16 insertions(+), 39 deletions(-) > > diff --git a/lib/stream-fd.c b/lib/stream-fd.c > index 7bf5ebd..38dba7c 100644 > --- a/lib/stream-fd.c > +++ b/lib/stream-fd.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2008, 2009, 2010 Nicira Networks. > + * Copyright (c) 2008, 2009, 2010, 2012 Nicira Networks. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -42,7 +42,6 @@ struct stream_fd > { > struct stream stream; > int fd; > - char *unlink_path; > }; > > static const struct stream_class stream_fd_class; > @@ -55,21 +54,17 @@ static void maybe_unlink_and_free(char *path); > * and stores a pointer to the stream in '*streamp'. Initial connection > status > * 'connect_status' is interpreted as described for stream_init(). > * > - * When '*streamp' is closed, then 'unlink_path' (if nonnull) will be passed > to > - * fatal_signal_unlink_file_now() and then freed with free(). > - * > * Returns 0 if successful, otherwise a positive errno value. (The current > * implementation never fails.) */ > int > new_fd_stream(const char *name, int fd, int connect_status, > - char *unlink_path, struct stream **streamp) > + struct stream **streamp) > { > struct stream_fd *s; > > s = xmalloc(sizeof *s); > stream_init(&s->stream, &stream_fd_class, connect_status, name); > s->fd = fd; > - s->unlink_path = unlink_path; > *streamp = &s->stream; > return 0; > } > @@ -86,7 +81,6 @@ fd_close(struct stream *stream) > { > struct stream_fd *s = stream_fd_cast(stream); > close(s->fd); > - maybe_unlink_and_free(s->unlink_path); > free(s); > } > > diff --git a/lib/stream-fd.h b/lib/stream-fd.h > index d2a34eb..b42615f 100644 > --- a/lib/stream-fd.h > +++ b/lib/stream-fd.h > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2008, 2009 Nicira Networks. > + * Copyright (c) 2008, 2009, 2012 Nicira Networks. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -26,7 +26,7 @@ struct pstream; > struct sockaddr; > > int new_fd_stream(const char *name, int fd, int connect_status, > - char *unlink_path, struct stream **streamp); > + struct stream **streamp); > int new_fd_pstream(const char *name, int fd, > int (*accept_cb)(int fd, const struct sockaddr *, > size_t sa_len, struct stream **), > diff --git a/lib/stream-tcp.c b/lib/stream-tcp.c > index 9a7614d..052ad8c 100644 > --- a/lib/stream-tcp.c > +++ b/lib/stream-tcp.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2008, 2009, 2010 Nicira Networks. > + * Copyright (c) 2008, 2009, 2010, 2012 Nicira Networks. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -58,7 +58,7 @@ new_tcp_stream(const char *name, int fd, int connect_status, > return errno; > } > > - retval = new_fd_stream(name, fd, connect_status, NULL, streamp); > + retval = new_fd_stream(name, fd, connect_status, streamp); > if (!retval) { > struct stream *stream = *streamp; > stream_set_remote_ip(stream, remote->sin_addr.s_addr); > diff --git a/lib/stream-unix.c b/lib/stream-unix.c > index d7dde8f..d2e8e82 100644 > --- a/lib/stream-unix.c > +++ b/lib/stream-unix.c > @@ -1,5 +1,5 @@ > /* > - * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks. > + * Copyright (c) 2008, 2009, 2010, 2011, 2012 Nicira Networks. > * > * Licensed under the Apache License, Version 2.0 (the "License"); > * you may not use this file except in compliance with the License. > @@ -39,28 +39,19 @@ VLOG_DEFINE_THIS_MODULE(stream_unix); > > /* Active UNIX socket. */ > > -/* Number of unix sockets created so far, to ensure binding path uniqueness. > */ > -static int n_unix_sockets; > - > static int > unix_open(const char *name, char *suffix, struct stream **streamp) > { > const char *connect_path = suffix; > - char *bind_path; > int fd; > > - bind_path = xasprintf("/tmp/stream-unix.%ld.%d", > - (long int) getpid(), n_unix_sockets++); > - fd = make_unix_socket(SOCK_STREAM, true, false, bind_path, connect_path); > + fd = make_unix_socket(SOCK_STREAM, true, false, NULL, connect_path); > if (fd < 0) { > - VLOG_ERR("%s: connection to %s failed: %s", > - bind_path, connect_path, strerror(-fd)); > - free(bind_path); > + VLOG_ERR("%s: connection failed (%s)", connect_path, strerror(-fd)); > return -fd; > } > > - return new_fd_stream(name, fd, check_connection_completion(fd), > - bind_path, streamp); > + return new_fd_stream(name, fd, check_connection_completion(fd), streamp); > } > > const struct stream_class unix_stream_class = { > @@ -116,7 +107,7 @@ punix_accept(int fd, const struct sockaddr *sa, size_t > sa_len, > } else { > strcpy(name, "unix"); > } > - return new_fd_stream(name, fd, 0, NULL, streamp); > + return new_fd_stream(name, fd, 0, streamp); > } > > const struct pstream_class punix_pstream_class = { > diff --git a/python/ovs/stream.py b/python/ovs/stream.py > index 7ea9e46..08c6293 100644 > --- a/python/ovs/stream.py > +++ b/python/ovs/stream.py > @@ -1,4 +1,4 @@ > -# Copyright (c) 2010, 2011 Nicira Networks > +# Copyright (c) 2010, 2011, 2012 Nicira Networks > # > # Licensed under the Apache License, Version 2.0 (the "License"); > # you may not use this file except in compliance with the License. > @@ -27,7 +27,6 @@ vlog = ovs.vlog.Vlog("stream") > class Stream(object): > """Bidirectional byte stream. Currently only Unix domain sockets > are implemented.""" > - n_unix_sockets = 0 > > # States. > __S_CONNECTING = 0 > @@ -46,10 +45,9 @@ class Stream(object): > False.""" > return name.startswith("unix:") > > - def __init__(self, socket, name, bind_path, status): > + def __init__(self, socket, name, status): > self.socket = socket > self.name = name > - self.bind_path = bind_path > if status == errno.EAGAIN: > self.state = Stream.__S_CONNECTING > elif status == 0: > @@ -76,18 +74,15 @@ class Stream(object): > if not Stream.is_valid_name(name): > return errno.EAFNOSUPPORT, None > > - Stream.n_unix_sockets += 1 > - bind_path = "/tmp/stream-unix.%d.%d" % (os.getpid(), > - Stream.n_unix_sockets) > connect_path = name[5:] > error, sock = ovs.socket_util.make_unix_socket(socket.SOCK_STREAM, > - True, bind_path, > + True, None, > connect_path) > if error: > return error, None > else: > status = ovs.socket_util.check_connection_completion(sock) > - return 0, Stream(sock, name, bind_path, status) > + return 0, Stream(sock, name, status) > > @staticmethod > def open_block((error, stream)): > @@ -117,9 +112,6 @@ class Stream(object): > > def close(self): > self.socket.close() > - if self.bind_path is not None: > - ovs.fatal_signal.unlink_file_now(self.bind_path) > - self.bind_path = None > > def __scs_connecting(self): > retval = ovs.socket_util.check_connection_completion(self.socket) > @@ -288,7 +280,7 @@ class PassiveStream(object): > try: > sock, addr = self.socket.accept() > ovs.socket_util.set_nonblocking(sock) > - return 0, Stream(sock, "unix:%s" % addr, None, 0) > + return 0, Stream(sock, "unix:%s" % addr, 0) > except socket.error, e: > error = ovs.socket_util.get_exception_errno(e) > if error != errno.EAGAIN: > -- > 1.7.2.5 > > _______________________________________________ > dev mailing list > dev@openvswitch.org > http://openvswitch.org/mailman/listinfo/dev _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev