stream: Generalize stream_open_block().
[sliver-openvswitch.git] / lib / stream.c
index ed497d6..7d00caf 100644 (file)
@@ -222,13 +222,21 @@ error:
     return error;
 }
 
+/* Blocks until a previously started stream connection attempt succeeds or
+ * fails.  'error' should be the value returned by stream_open() and 'streamp'
+ * should point to the stream pointer set by stream_open().  Returns 0 if
+ * successful, otherwise a positive errno value other than EAGAIN or
+ * EINPROGRESS.  If successful, leaves '*streamp' untouched; on error, closes
+ * '*streamp' and sets '*streamp' to null.
+ *
+ * Typical usage:
+ *   error = stream_open_block(stream_open("tcp:1.2.3.4:5", &stream), &stream);
+ */
 int
-stream_open_block(const char *name, struct stream **streamp)
+stream_open_block(int error, struct stream **streamp)
 {
-    struct stream *stream;
-    int error;
+    struct stream *stream = *streamp;
 
-    error = stream_open(name, &stream);
     while (error == EAGAIN) {
         stream_run(stream);
         stream_run_wait(stream);