diff -r 0f7a243b03e4 include/ecrt.h
--- a/include/ecrt.h	Mon Jan 30 15:33:54 2012 +0100
+++ b/include/ecrt.h	Mon Jul 02 16:37:08 2012 +0200
@@ -1346,6 +1346,16 @@
         ec_domain_t *domain /**< Domain. */
         );
 
+/** Check if all the datagrams of the domain have been received.
+ *
+ * \retval  1 on received.
+ * \retval  0 not received.
+ * \retval <0 Error code.
+ */
+int ecrt_domain_received(
+		const ec_domain_t *domain /**< Domain. */
+		);
+
 /** Determines the states of the domain's datagrams.
  *
  * Evaluates the working counters of the received datagrams and outputs
diff -r 0f7a243b03e4 lib/domain.c
--- a/lib/domain.c	Mon Jan 30 15:33:54 2012 +0100
+++ b/lib/domain.c	Mon Jul 02 16:37:08 2012 +0200
@@ -99,6 +99,20 @@
 
 /*****************************************************************************/
 
+int ecrt_domain_received(const ec_domain_t *domain)
+{
+	int received = ioctl(domain->master->fd, EC_IOCTL_DOMAIN_RECEIVED,
+            domain->index);
+
+    if (received < 0) {
+        fprintf(stderr, "Failed to process domain: %s\n", strerror(errno));
+    }
+
+    return received;
+}
+
+/*****************************************************************************/
+
 void ecrt_domain_process(ec_domain_t *domain)
 {
     if (ioctl(domain->master->fd, EC_IOCTL_DOMAIN_PROCESS,
diff -r 0f7a243b03e4 master/cdev.c
--- a/master/cdev.c	Mon Jan 30 15:33:54 2012 +0100
+++ b/master/cdev.c	Mon Jul 02 16:37:08 2012 +0200
@@ -2522,6 +2522,31 @@
 
 /*****************************************************************************/
 
+/** Check domain's datagrams have received.
+ */
+int ec_cdev_ioctl_domain_received(
+        ec_master_t *master, /**< EtherCAT master. */
+        unsigned long arg, /**< ioctl() argument. */
+        ec_cdev_priv_t *priv /**< Private data structure of file handle. */
+        )
+{
+    const ec_domain_t *domain;
+
+    if (unlikely(!priv->requested))
+        return -EPERM;
+
+    /* no locking of master_sem needed, because domain will not be deleted in
+     * the meantime. */
+
+    if (!(domain = ec_master_find_domain(master, arg))) {
+        return -ENOENT;
+    }
+
+    return ecrt_domain_received(domain);
+}
+
+/*****************************************************************************/
+
 /** Process the domain.
  */
 int ec_cdev_ioctl_domain_process(
@@ -3750,6 +3775,9 @@
         case EC_IOCTL_DOMAIN_OFFSET:
             ret = ec_cdev_ioctl_domain_offset(master, arg, priv);
             break;
+        case EC_IOCTL_DOMAIN_RECEIVED:
+        	ret = ec_cdev_ioctl_domain_received(master, arg, priv);
+            break;
         case EC_IOCTL_DOMAIN_PROCESS:
             if (!(filp->f_mode & FMODE_WRITE)) {
                 ret = -EPERM;
diff -r 0f7a243b03e4 master/domain.c
--- a/master/domain.c	Mon Jan 30 15:33:54 2012 +0100
+++ b/master/domain.c	Mon Jul 02 16:37:08 2012 +0200
@@ -396,6 +396,20 @@
 
 /*****************************************************************************/
 
+int ecrt_domain_received(const ec_domain_t *domain)
+{
+    ec_datagram_t *datagram;
+
+    list_for_each_entry(datagram, &domain->datagrams, list) {
+        if (datagram->state != EC_DATAGRAM_RECEIVED) {
+            return 0;
+        }
+    }
+    return 1;
+}
+
+/*****************************************************************************/
+
 void ecrt_domain_process(ec_domain_t *domain)
 {
     uint16_t working_counter_sum;
@@ -467,6 +481,7 @@
 EXPORT_SYMBOL(ecrt_domain_size);
 EXPORT_SYMBOL(ecrt_domain_external_memory);
 EXPORT_SYMBOL(ecrt_domain_data);
+EXPORT_SYMBOL(ecrt_domain_received);
 EXPORT_SYMBOL(ecrt_domain_process);
 EXPORT_SYMBOL(ecrt_domain_queue);
 EXPORT_SYMBOL(ecrt_domain_state);
diff -r 0f7a243b03e4 master/ioctl.h
--- a/master/ioctl.h	Mon Jan 30 15:33:54 2012 +0100
+++ b/master/ioctl.h	Mon Jul 02 16:37:08 2012 +0200
@@ -137,6 +137,7 @@
 #define EC_IOCTL_VOE_EXEC             EC_IOWR(0x47, ec_ioctl_voe_t)
 #define EC_IOCTL_VOE_DATA             EC_IOWR(0x48, ec_ioctl_voe_t)
 #define EC_IOCTL_SET_SEND_INTERVAL     EC_IOW(0x49, size_t)
+#define EC_IOCTL_DOMAIN_RECEIVED       EC_IO(0x50)
 
 /*****************************************************************************/
 
