+ close(exitfd[0]);
+ close(readyfd[1]);
+
+ sfd1 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+ sfd2 = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+ u.in.sin_family = AF_INET;
+ u.in.sin_port = htons(OSERVER_PORT);
+ u.in.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+
+ /* Wait until child is ready... */
+ if (read(readyfd[0], &c, 1) != 1)
+ errx(1, "Child problems");
+
+ /* Go! */
+ ok1(connect(sfd1, &u.addr, sizeof(u.in)) == 0);
+ ok1(connect(sfd2, &u.addr, sizeof(u.in)) == 0);
+
+ ok1(write_sall(sfd1, "question"));
+ ok1(write_sall(sfd2, "question"));
+ /* It shouldn't say anything until we've finished! */
+ ok1(no_input(sfd1));
+ ok1(no_input(sfd2));
+
+ ok1(write_sall(sfd1, " 1\n"));
+ ok1(write_sall(sfd2, " 2\n"));
+
+ ok1(input_is(sfd1, "QUESTION 1\n"));
+ ok1(input_is(sfd2, "QUESTION 2\n"));
+
+ /* Sockets should be dead now. */
+ ok1(read(sfd1, &c, 1) == 0);
+ ok1(read(sfd2, &c, 1) == 0);
+
+ /* Shut down server. */
+ write(exitfd[1], "", 1);
+
+ /* This will close once it's shut down, and return. */
+ ok1(read(readyfd[0], &c, 1) == 0);
+