struct dirent *dirent;
unix_addr_t addr;
int ret;
+ int success = 0;
dir = opendir("/tmp");
if (!dir) return -errno;
addr.sun_family = AF_UNIX;
while ((dirent = readdir(dir))) {
- if (1 &&
+ bool forb_socket =
#ifdef _DIRENT_HAVE_D_TYPE
- dirent->d_type == DT_SOCK &&
+ (dirent->d_type == DT_SOCK ||
+ dirent->d_type == DT_UNKNOWN) &&
#endif
- strncmp(dirent->d_name, "forb-", 5) == 0)
+ (strncmp(dirent->d_name, "forb-", 5) == 0);
+
+/* printf("d_name=%s d_type=%d (%d)\n", dirent->d_name, dirent->d_type, DT_SOCK); */
+ if (forb_socket)
{
strcpy(addr.sun_path, "/tmp/");
strncat(addr.sun_path, dirent->d_name, sizeof(addr.sun_path));
(struct sockaddr*)&addr, sizeof(addr));
/* We do not care about errors in brodcasts -
* the socket may nomore be active */
- if (ret != len) {
+ if (ret == len) {
+ success++;
+ } else {
/* perror("unix_broadcast"); */
/* return ret; */
}
}
closedir(dir);
- return len;
+ if (success) {
+ ret = len;
+ } else {
+ ret = -1;
+ }
+ return ret;
}
static const forb_proto_t proto_unix = {
const char *msg2 = "Blablabla!";
#define NUM_PORTS 10
+char *timeout_msg = "timeout\n";
+
+void timeout(int signal)
+{
+ error(1, 0, timeout_msg);
+}
+
int main()
{
int len;
forb_port_t port[NUM_PORTS];
int i, ret;
+ signal(SIGALRM, timeout);
+
for (i=0; i<NUM_PORTS; i++) {
forb_server_id_init(&server[i]);
if (forb_unix_port_init(&port[i], &server[i]) != 0)
for (i=1; i<NUM_PORTS; i++) {
forb_peer_t peer;
char buf[100];
+ char tmsg[100];
peer.server_id = server[i];
peer.port = &port[0];
if (ret != len)
error(1, errno, "send(to %d) = %d", i, ret);
+ sprintf(tmsg, "Timeout when sending from 0 to %d\n", i);
+ timeout_msg = tmsg;
+ alarm(1); /* timeout 1s */
ret = unix_recv(&port[i], buf, sizeof(buf));
if (ret != len)
error(1, errno, "recv(port[%d]) = %d", i, ret);
for (i=0; i<NUM_PORTS; i++) {
char buf[100];
+ char tmsg[100];
+ sprintf(tmsg, "Timeout when receiving broadcast for port %d\n", i);
+ timeout_msg = tmsg;
+ alarm(1);
ret = unix_recv(&port[i], buf, sizeof(buf));
if (ret != len)
error(1, errno, "broadcast recv(port[%d]) = %d should be %d", i, ret, len);