Browse Source

[2187] Throw exception if packet sending failed.

Marcin Siodelski 12 years ago
parent
commit
5633225648
2 changed files with 5 additions and 3 deletions
  1. 2 2
      src/lib/dhcp/iface_mgr.cc
  2. 3 1
      src/lib/dhcp/tests/iface_mgr_unittest.cc

+ 2 - 2
src/lib/dhcp/iface_mgr.cc

@@ -702,7 +702,7 @@ IfaceMgr::send(const Pkt6Ptr& pkt) {
 
 
     result = sendmsg(getSocket(*pkt), &m, 0);
     result = sendmsg(getSocket(*pkt), &m, 0);
     if (result < 0) {
     if (result < 0) {
-        isc_throw(Unexpected, "Pkt6 send failed: sendmsg() returned " << result);
+        isc_throw(SocketWriteError, "Pkt6 send failed: sendmsg() returned " << result);
     }
     }
 
 
     return (result);
     return (result);
@@ -752,7 +752,7 @@ IfaceMgr::send(const Pkt4Ptr& pkt)
 
 
     int result = sendmsg(getSocket(*pkt), &m, 0);
     int result = sendmsg(getSocket(*pkt), &m, 0);
     if (result < 0) {
     if (result < 0) {
-        isc_throw(Unexpected, "Pkt4 send failed.");
+        isc_throw(SocketWriteError, "pkt4 send failed");
     }
     }
 
 
     return (result);
     return (result);

+ 3 - 1
src/lib/dhcp/tests/iface_mgr_unittest.cc

@@ -639,10 +639,11 @@ TEST_F(IfaceMgrTest, sendReceive6) {
     // we should accept both values as source ports.
     // we should accept both values as source ports.
     EXPECT_TRUE((rcvPkt->getRemotePort() == 10546) || (rcvPkt->getRemotePort() == 10547));
     EXPECT_TRUE((rcvPkt->getRemotePort() == 10546) || (rcvPkt->getRemotePort() == 10547));
 
 
-    // try to receive data over the closed socket. Closed socket's descriptor is
+    // try to send/receive data over the closed socket. Closed socket's descriptor is
     // still being hold by IfaceMgr which will try to use it to receive data.
     // still being hold by IfaceMgr which will try to use it to receive data.
     close(socket1);
     close(socket1);
     EXPECT_THROW(ifacemgr->receive6(10), SocketReadError);
     EXPECT_THROW(ifacemgr->receive6(10), SocketReadError);
+    EXPECT_THROW(ifacemgr->send(sendPkt), SocketWriteError);
 }
 }
 
 
 TEST_F(IfaceMgrTest, sendReceive4) {
 TEST_F(IfaceMgrTest, sendReceive4) {
@@ -736,6 +737,7 @@ TEST_F(IfaceMgrTest, sendReceive4) {
     // still being hold by IfaceMgr which will try to use it to receive data.
     // still being hold by IfaceMgr which will try to use it to receive data.
     close(socket1);
     close(socket1);
     EXPECT_THROW(ifacemgr->receive4(10), SocketReadError);
     EXPECT_THROW(ifacemgr->receive4(10), SocketReadError);
+    EXPECT_THROW(ifacemgr->send(sendPkt), SocketWriteError);
 }
 }