diff --git a/barchart-udt-core/.classpath b/barchart-udt-core/.classpath
index 49c1603..c17861b 100644
--- a/barchart-udt-core/.classpath
+++ b/barchart-udt-core/.classpath
@@ -27,7 +27,7 @@
-
+
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java
index 935ab1f..27b4c07 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/net/NetServerSocketUDT.java
@@ -23,8 +23,8 @@
/**
* {@link ServerSocket} - like wrapper for {@link SocketUDT}
*/
-public class NetServerSocketUDT extends ServerSocket implements
- IceServerSocket, IceCommon {
+public class NetServerSocketUDT extends ServerSocket
+ implements IceServerSocket, IceCommon {
protected final SocketUDT socketUDT;
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java
index 4cbe935..bcd2be0 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/NioServerSocketUDT.java
@@ -25,7 +25,7 @@ protected NioServerSocketUDT(final ServerSocketChannelUDT channelUDT)
@Override
public Socket accept() throws IOException {
- throw new RuntimeException("feature not available");
+ return channelUDT.accept().socket();
}
@Override
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java
index a012d05..fd196c3 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectionKeyUDT.java
@@ -1,15 +1,16 @@
/**
* Copyright (C) 2009-2013 Barchart, Inc.
- *
- * All rights reserved. Licensed under the OSI BSD License.
- *
- * http://www.opensource.org/licenses/bsd-license.php
- */
+*
+* All rights reserved. Licensed under the OSI BSD License.
+*
+* http://www.opensource.org/licenses/bsd-license.php
+*/
package com.barchart.udt.nio;
import java.nio.channels.CancelledKeyException;
import java.nio.channels.SelectableChannel;
import java.nio.channels.SelectionKey;
+import java.nio.channels.spi.AbstractSelectionKey;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -24,8 +25,8 @@
/**
* UDT selection key implementation.
*/
-public class SelectionKeyUDT extends SelectionKey implements
- Comparable {
+public class SelectionKeyUDT extends AbstractSelectionKey
+ implements Comparable {
/**
* JDK interest to Epoll READ mapping.
@@ -93,7 +94,7 @@ public static final String toStringOps(final int selectOps) {
/**
* Key validity state. Key is valid when created, and invalid when canceled.
*/
- private volatile boolean isValid;
+ // private volatile boolean isValid;
/**
* Reported ready interest.
@@ -140,17 +141,16 @@ protected void assertValidKey() throws CancelledKeyException {
*/
protected void assertValidOps(final int interestOps) {
if ((interestOps & ~(channel().validOps())) != 0) {
- throw new IllegalArgumentException("invalid interestOps="
- + interestOps);
+ throw new IllegalArgumentException(
+ "invalid interestOps=" + interestOps);
}
}
- @Override
- public void cancel() {
- if (isValid()) {
- selector().cancel(this);
- }
- }
+ /*
+ * @Override
+ *
+ * public void cancel() { if (isValid()) { selector().cancel(this); } }
+ */
@Override
public SelectableChannel channel() {
@@ -202,6 +202,10 @@ protected boolean doRead(final int resultIndex) {
readyOps = channel().validOps();
return true;
} else {
+ /**
+ * in some programe use invoke selectNow to clear canceld
+ * key
+ */
logError("Unexpected error report.");
return false;
}
@@ -414,10 +418,11 @@ protected boolean isSocketBroken() {
}
}
- @Override
- public boolean isValid() {
- return isValid;
- }
+ /*
+ * @Override
+ *
+ * public boolean isValid() { return isValid; }
+ */
/**
* Channel role.
@@ -427,13 +432,14 @@ protected KindUDT kindUDT() {
}
/**
- * Key processing logic error logger.
+ * Key processing logic error logger. user while use selectNow to clear
+ * cancel keys
*/
protected void logError(final String comment) {
final String message = "logic error : \n\t" + this;
- log.warn(message, new Exception("" + comment));
+ log.debug(message, new Exception("" + comment));
}
@@ -451,7 +457,10 @@ protected void makeValid(final boolean isValid) {
} catch (final Throwable e) {
log.error("Epoll failure.", e);
} finally {
- this.isValid = isValid;
+ /*
+ * if (!isValid) { cancel(); }
+ */
+ // this.isValid = isValid;
}
}
@@ -486,20 +495,20 @@ protected SocketUDT socketUDT() {
@Override
public String toString() {
- return String
- .format("[id: 0x%08x] poll=%s ready=%s inter=%s %s %s %s bind=%s:%s peer=%s:%s", //
- socketUDT().id(), //
- epollOpt, //
- toStringOps(readyOps), //
- toStringOps(interestOps), //
- channelUDT.typeUDT(), //
- channelUDT.kindUDT(), //
- socketUDT().status(), //
- socketUDT().getLocalInetAddress(), //
- socketUDT().getLocalInetPort(), //
- socketUDT().getRemoteInetAddress(), //
- socketUDT().getRemoteInetPort() //
- );
+ return String.format(
+ "[id: 0x%08x] poll=%s ready=%s inter=%s %s %s %s bind=%s:%s peer=%s:%s", //
+ socketUDT().id(), //
+ epollOpt, //
+ toStringOps(readyOps), //
+ toStringOps(interestOps), //
+ channelUDT.typeUDT(), //
+ channelUDT.kindUDT(), //
+ socketUDT().status(), //
+ socketUDT().getLocalInetAddress(), //
+ socketUDT().getLocalInetPort(), //
+ socketUDT().getRemoteInetAddress(), //
+ socketUDT().getRemoteInetPort() //
+ );
}
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java
index 6f33f1f..cd69b50 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SelectorUDT.java
@@ -124,8 +124,11 @@ protected static Selector open(final TypeUDT type) throws IOException {
/**
* Canceled keys.
*/
- private final ConcurrentMap //
- terminatedKeyMap = new ConcurrentHashMap();
+ /*
+ * private final ConcurrentMap //
+ * terminatedKeyMap = new ConcurrentHashMap();
+ */
/** guarded by {@link #doSelectLocked} */
private volatile int wakeupBaseCount;
@@ -150,31 +153,25 @@ protected SelectorUDT( //
}
- /**
- * Enqueue cancel request.
- */
- protected void cancel(final SelectionKeyUDT keyUDT) {
- terminatedKeyMap.putIfAbsent(keyUDT, keyUDT);
- }
-
/**
* Process pending cancel requests.
*/
protected void doCancel() {
- if (terminatedKeyMap.isEmpty()) {
- return;
- }
-
- final Iterator iterator = terminatedKeyMap.values()
- .iterator();
-
- while (iterator.hasNext()) {
- final SelectionKeyUDT keyUDT = iterator.next();
- iterator.remove();
- if (keyUDT.isValid()) {
+ final Set cks = cancelledKeys();
+
+ synchronized (cks) {
+ if (cks.isEmpty())
+ return;
+ final Iterator iterator = cks.iterator();
+ while (iterator.hasNext()) {
+ final SelectionKeyUDT keyUDT = iterator.next();
+ iterator.remove();
+ // if (keyUDT.isValid()) {
+ this.deregister(keyUDT);
keyUDT.makeValid(false);
registeredKeyMap.remove(keyUDT.socketId());
+ // }
}
}
@@ -210,14 +207,15 @@ protected int doEpollEnter(final long millisTimeout) throws IOException {
* >0 : finite;
* @return
*
- * <0 : should not happen
+ * <0 : should not happen
*
* =0 : means nothing was selected/timeout
*
* >0 : number of selected keys
*/
- protected int doEpollExclusive(final long millisTimeout) throws IOException {
+ protected int doEpollExclusive(final long millisTimeout)
+ throws IOException {
try {
@@ -299,7 +297,7 @@ protected int doEpollSelectUDT(final long timeout) throws ExceptionUDT {
writeBuffer, //
sizeBuffer, //
timeout //
- );
+ );
}
protected void doResults() {
@@ -379,7 +377,7 @@ protected void implCloseSelector() throws IOException {
selectLock.lock();
for (final SelectionKeyUDT keyUDT : registeredKeyMap.values()) {
- cancel(keyUDT);
+ keyUDT.cancel();
}
} finally {
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java
index 932b9d5..dd11a2a 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/ServerSocketChannelUDT.java
@@ -38,8 +38,8 @@
* assert connectChannel.isConnected();
*
*/
-public class ServerSocketChannelUDT extends ServerSocketChannel implements
- ChannelUDT {
+public class ServerSocketChannelUDT extends ServerSocketChannel
+ implements ChannelUDT {
protected static final Logger log = LoggerFactory
.getLogger(ServerSocketChannelUDT.class);
diff --git a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java
index c402f9d..eb5b430 100644
--- a/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java
+++ b/barchart-udt-core/src/main/java/com/barchart/udt/nio/SocketChannelUDT.java
@@ -356,8 +356,8 @@ public int read(final ByteBuffer buffer) throws IOException {
}
@Override
- public long read(final ByteBuffer[] dsts, final int offset, final int length)
- throws IOException {
+ public long read(final ByteBuffer[] dsts, final int offset,
+ final int length) throws IOException {
throw new RuntimeException("feature not available");
}
@@ -521,5 +521,4 @@ public SocketChannelUDT bind(final SocketAddress localAddress)
return this;
}
-
}
diff --git a/barchart-udt-core/src/main/patches/UDT4/readme.md b/barchart-udt-core/src/main/patches/UDT4/readme.md
index 6a55846..f700303 100644
--- a/barchart-udt-core/src/main/patches/UDT4/readme.md
+++ b/barchart-udt-core/src/main/patches/UDT4/readme.md
@@ -7,5 +7,4 @@
http://www.opensource.org/licenses/bsd-license.php
-->
-patches to udt c++ v 4.X
-
+patches to udt c++ v 4.11 from git
diff --git a/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch b/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch
deleted file mode 100644
index f2ebb07..0000000
--- a/barchart-udt-core/src/main/patches/udt4/2013-05-11.patch
+++ /dev/null
@@ -1,380 +0,0 @@
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.cpp
-index e444218..5c83456 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.cpp
-@@ -1104,6 +1104,32 @@ int CUDTUnited::epoll_add_usock(const int eid, const UDTSOCKET u, const int* eve
- return ret;
- }
-
-+// BARCHART
-+int CUDTUnited::epoll_update_usock(const int eid, const UDTSOCKET u, const int* events)
-+{
-+ CUDTSocket* s = locate(u);
-+ int ret = -1;
-+ if (NULL != s) {
-+ ret = m_EPoll.update_usock(eid, u, events);
-+ } else {
-+ throw CUDTException(5, 4);
-+ }
-+ return ret;
-+}
-+
-+// BARCHART
-+int CUDTUnited::epoll_verify_usock(const int eid, const UDTSOCKET u, int* events)
-+{
-+ CUDTSocket* s = locate(u);
-+ int ret = -1;
-+ if (NULL != s) {
-+ ret = m_EPoll.verify_usock(eid, u, events);
-+ } else {
-+ throw CUDTException(5, 4);
-+ }
-+ return ret;
-+}
-+
- int CUDTUnited::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events)
- {
- return m_EPoll.add_ssock(eid, s, events);
-@@ -1111,8 +1137,6 @@ int CUDTUnited::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* eve
-
- int CUDTUnited::epoll_remove_usock(const int eid, const UDTSOCKET u)
- {
-- int ret = m_EPoll.remove_usock(eid, u);
--
- CUDTSocket* s = locate(u);
- if (NULL != s)
- {
-@@ -1123,7 +1147,7 @@ int CUDTUnited::epoll_remove_usock(const int eid, const UDTSOCKET u)
- // throw CUDTException(5, 4);
- //}
-
-- return ret;
-+ return m_EPoll.remove_usock(eid, u);
- }
-
- int CUDTUnited::epoll_remove_ssock(const int eid, const SYSSOCKET s)
-@@ -2012,6 +2036,44 @@ int CUDT::epoll_add_usock(const int eid, const UDTSOCKET u, const int* events)
- }
- }
-
-+// BARCHART
-+int CUDT::epoll_update_usock(const int eid, const UDTSOCKET u, const int* events)
-+{
-+ try
-+ {
-+ return s_UDTUnited.epoll_update_usock(eid, u, events);
-+ }
-+ catch (CUDTException e)
-+ {
-+ s_UDTUnited.setError(new CUDTException(e));
-+ return ERROR;
-+ }
-+ catch (...)
-+ {
-+ s_UDTUnited.setError(new CUDTException(-1, 0, 0));
-+ return ERROR;
-+ }
-+}
-+
-+// BARCHART
-+int CUDT::epoll_verify_usock(const int eid, const UDTSOCKET u, int* events)
-+{
-+ try
-+ {
-+ return s_UDTUnited.epoll_verify_usock(eid, u, events);
-+ }
-+ catch (CUDTException e)
-+ {
-+ s_UDTUnited.setError(new CUDTException(e));
-+ return ERROR;
-+ }
-+ catch (...)
-+ {
-+ s_UDTUnited.setError(new CUDTException(-1, 0, 0));
-+ return ERROR;
-+ }
-+}
-+
- int CUDT::epoll_add_ssock(const int eid, const SYSSOCKET s, const int* events)
- {
- try
-@@ -2289,6 +2351,18 @@ int epoll_add_usock(int eid, UDTSOCKET u, const int* events)
- return CUDT::epoll_add_usock(eid, u, events);
- }
-
-+// BARCHART
-+int epoll_update_usock(int eid, UDTSOCKET u, const int* events)
-+{
-+ return CUDT::epoll_update_usock(eid, u, events);
-+}
-+
-+// BARCHART
-+int epoll_verify_usock(int eid, UDTSOCKET u, int* events)
-+{
-+ return CUDT::epoll_verify_usock(eid, u, events);
-+}
-+
- int epoll_add_ssock(int eid, SYSSOCKET s, const int* events)
- {
- return CUDT::epoll_add_ssock(eid, s, events);
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.h
-index 24f1a02..2f5f434 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/api.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/api.h
-@@ -181,6 +181,11 @@ public:
- int epoll_wait(const int eid, std::set* readfds, std::set* writefds, int64_t msTimeOut, std::set* lrfds = NULL, std::set* lwfds = NULL);
- int epoll_release(const int eid);
-
-+ // BARCHART
-+ int epoll_update_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
-+ // BARCHART
-+ int epoll_verify_usock(const int eid, const UDTSOCKET u, int* events);
-+
- // Functionality:
- // record the UDT exception.
- // Parameters:
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/ccc.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/ccc.cpp
-index 048b7ec..a58816f 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/ccc.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/ccc.cpp
-@@ -35,7 +35,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- /*****************************************************************************
- written by
-- Yunhong Gu, last updated 02/21/2013
-+ Yunhong Gu, last updated 02/28/2012
- *****************************************************************************/
-
-
-@@ -213,7 +213,7 @@ void CUDTCC::onACK(int32_t ack)
- if (m_iRcvRate > 0)
- m_dPktSndPeriod = 1000000.0 / m_iRcvRate;
- else
-- m_dPktSndPeriod = (m_iRTT + m_iRCInterval) / m_dCWndSize;
-+ m_dPktSndPeriod = m_dCWndSize / (m_iRTT + m_iRCInterval);
- }
- }
- else
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h
-index 3782d61..3ecf846 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h
-@@ -47,6 +47,10 @@ written by
- #include
- #include
- #else
-+ #ifdef __MINGW__
-+ #include
-+ #include
-+ #endif
- #include
- #endif
- #include
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp
-index 1f3b206..ec8b2fa 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp
-@@ -580,8 +580,6 @@ void CUDT::connect(const sockaddr* serv_addr)
- if (m_bConnecting || m_bConnected)
- throw CUDTException(5, 2, 0);
-
-- m_bConnecting = true;
--
- // record peer/server address
- delete m_pPeerAddr;
- m_pPeerAddr = (AF_INET == m_iIPversion) ? (sockaddr*)new sockaddr_in : (sockaddr*)new sockaddr_in6;
-@@ -628,6 +626,8 @@ void CUDT::connect(const sockaddr* serv_addr)
- m_pSndQueue->sendto(serv_addr, request);
- m_llLastReqTime = CTimer::getTime();
-
-+ m_bConnecting = true;
-+
- // asynchronous connect, return immediately
- if (!m_bSynRecving)
- {
-@@ -801,12 +801,12 @@ POST_CONNECT:
- m_pRNode->m_bOnList = true;
- m_pRcvQueue->setNewEntry(this);
-
-- // acknowledge the management module.
-- s_UDTUnited.connect_complete(m_SocketID);
--
- // acknowledde any waiting epolls to write
- s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_OUT, true);
-
-+ // acknowledge the management module.
-+ s_UDTUnited.connect_complete(m_SocketID);
-+
- return 0;
- }
-
-@@ -951,9 +951,7 @@ void CUDT::close()
- if (m_bConnected)
- m_pSndQueue->m_pSndUList->remove(this);
-
-- // trigger any pending IO events.
-- s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true);
-- // then remove itself from all epoll monitoring
-+ // remove itself from all epoll monitoring
- try
- {
- for (set::iterator i = m_sPollID.begin(); i != m_sPollID.end(); ++ i)
-@@ -2462,7 +2460,7 @@ int CUDT::listen(sockaddr* addr, CPacket& packet)
- char clienthost[NI_MAXHOST];
- char clientport[NI_MAXSERV];
- getnameinfo(addr, (AF_INET == m_iVersion) ? sizeof(sockaddr_in) : sizeof(sockaddr_in6), clienthost, sizeof(clienthost), clientport, sizeof(clientport), NI_NUMERICHOST|NI_NUMERICSERV);
-- int64_t timestamp = (CTimer::getTime() - m_StartTime) / 60000000; // secret changes every one minute
-+ int64_t timestamp = (CTimer::getTime() - m_StartTime) / 60000000; // secret changes every one minute
- stringstream cookiestr;
- cookiestr << clienthost << ":" << clientport << ":" << timestamp;
- unsigned char cookie[16];
-@@ -2663,13 +2661,11 @@ void CUDT::addEPoll(const int eid)
-
- void CUDT::removeEPoll(const int eid)
- {
-- // clear IO events notifications;
-- // since this happens after the epoll ID has been removed, they cannot be set again
-- set remove;
-- remove.insert(eid);
-- s_UDTUnited.m_EPoll.update_events(m_SocketID, remove, UDT_EPOLL_IN | UDT_EPOLL_OUT, false);
--
- CGuard::enterCS(s_UDTUnited.m_EPoll.m_EPollLock);
- m_sPollID.erase(eid);
- CGuard::leaveCS(s_UDTUnited.m_EPoll.m_EPollLock);
-+
-+ // clear IO events notifications;
-+ // since this happens after the epoll ID has been removed, they cannot be set again
-+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_IN | UDT_EPOLL_OUT, false);
- }
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.h
-index 47caa79..bd15e17 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.h
-@@ -108,6 +108,12 @@ public: //API
- static int perfmon(UDTSOCKET u, CPerfMon* perf, bool clear = true);
- static UDTSTATUS getsockstate(UDTSOCKET u);
-
-+ // BARCHART
-+ static int epoll_update_usock(const int eid, const UDTSOCKET u, const int* events = NULL);
-+ // BARCHART
-+ static int epoll_verify_usock(const int eid, const UDTSOCKET u, int* events);
-+
-+
- public: // internal API
- static CUDT* getUDTHandle(UDTSOCKET u);
-
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp
-index 0e7ddb1..04acc04 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp
-@@ -107,6 +107,58 @@ int CEPoll::add_usock(const int eid, const UDTSOCKET& u, const int* events)
- return 0;
- }
-
-+// BARCHART
-+int CEPoll::update_usock(const int eid, const UDTSOCKET& u, const int* events)
-+{
-+ CGuard pg(m_EPollLock);
-+
-+ map::iterator p = m_mPolls.find(eid);
-+ if (p == m_mPolls.end()){
-+ throw CUDTException(5, 13);
-+ }
-+
-+ if(events){
-+ if (*events & UDT_EPOLL_IN){
-+ p->second.m_sUDTSocksIn.insert(u);
-+ }else{
-+ p->second.m_sUDTSocksIn.erase(u);
-+ }
-+ if (*events & UDT_EPOLL_OUT){
-+ p->second.m_sUDTSocksOut.insert(u);
-+ } else{
-+ p->second.m_sUDTSocksOut.erase(u);
-+ }
-+ }
-+
-+ return 0;
-+}
-+
-+
-+// BARCHART
-+int CEPoll::verify_usock(const int eid, const UDTSOCKET& u, int* events)
-+{
-+
-+ CGuard pg(m_EPollLock);
-+
-+ map::iterator p = m_mPolls.find(eid);
-+ if (p == m_mPolls.end()){
-+ throw CUDTException(5, 13);
-+ }
-+
-+ if(events){
-+ if(p->second.m_sUDTSocksIn.find(u) != p->second.m_sUDTSocksIn.end()){
-+ *events |= UDT_EPOLL_IN;
-+ }
-+ if(p->second.m_sUDTSocksOut.find(u) != p->second.m_sUDTSocksOut.end()){
-+ *events |= UDT_EPOLL_OUT;
-+ }
-+ }
-+
-+ return 0;
-+
-+}
-+
-+
- int CEPoll::add_ssock(const int eid, const SYSSOCKET& s, const int* events)
- {
- CGuard pg(m_EPollLock);
-@@ -117,7 +169,6 @@ int CEPoll::add_ssock(const int eid, const SYSSOCKET& s, const int* events)
-
- #ifdef LINUX
- epoll_event ev;
-- memset(&ev, 0, sizeof(epoll_event));
-
- if (NULL == events)
- ev.events = EPOLLIN | EPOLLOUT | EPOLLERR;
-@@ -152,7 +203,10 @@ int CEPoll::remove_usock(const int eid, const UDTSOCKET& u)
-
- p->second.m_sUDTSocksIn.erase(u);
- p->second.m_sUDTSocksOut.erase(u);
-- p->second.m_sUDTSocksEx.erase(u);
-+
-+ // when the socket is removed from a monitoring, it is not available anymore for any IO notification
-+ p->second.m_sUDTReads.erase(u);
-+ p->second.m_sUDTWrites.erase(u);
-
- return 0;
- }
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.h
-index a19f8ab..2dc349d 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.h
-@@ -93,6 +93,11 @@ public: // for CUDTUnited API
-
- int add_usock(const int eid, const UDTSOCKET& u, const int* events = NULL);
-
-+ // BARCHART
-+ int update_usock(const int eid, const UDTSOCKET& u, const int* events = NULL);
-+ // BARCHART
-+ int verify_usock(const int eid, const UDTSOCKET& u, int* events);
-+
- // Functionality:
- // add a system socket to an EPoll.
- // Parameters:
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/udt.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/udt.h
-index 6436363..ec0b8cf 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/udt.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/udt.h
-@@ -336,6 +336,11 @@ UDT_API int select(int nfds, UDSET* readfds, UDSET* writefds, UDSET* exceptfds,
- UDT_API int selectEx(const std::vector& fds, std::vector* readfds,
- std::vector* writefds, std::vector* exceptfds, int64_t msTimeOut);
-
-+// BARCHART
-+UDT_API int epoll_update_usock(int eid, UDTSOCKET u, const int* events = NULL);
-+// BARCHART
-+UDT_API int epoll_verify_usock(int eid, UDTSOCKET u, int* events);
-+
- UDT_API int epoll_create();
- UDT_API int epoll_add_usock(int eid, UDTSOCKET u, const int* events = NULL);
- UDT_API int epoll_add_ssock(int eid, SYSSOCKET s, const int* events = NULL);
diff --git a/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch b/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch
deleted file mode 100644
index d1bf28f..0000000
--- a/barchart-udt-core/src/main/patches/udt4/2013-05-12.patch
+++ /dev/null
@@ -1,63 +0,0 @@
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h
-index 3782d61..3ecf846 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/common.h
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/common.h
-@@ -47,6 +47,10 @@ written by
- #include
- #include
- #else
-+ #ifdef __MINGW__
-+ #include
-+ #include
-+ #endif
- #include
- #endif
- #include
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp
-index 1f3b206..17fc960 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/core.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/core.cpp
-@@ -952,7 +952,13 @@ void CUDT::close()
- m_pSndQueue->m_pSndUList->remove(this);
-
- // trigger any pending IO events.
-+ // s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true);
-+
-+ // BARCHART: Trigger pending events as errors; CEPoll::wait does error cleanup.
-+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_IN, false);
-+ s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_OUT, false);
- s_UDTUnited.m_EPoll.update_events(m_SocketID, m_sPollID, UDT_EPOLL_ERR, true);
-+
- // then remove itself from all epoll monitoring
- try
- {
-diff --git work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp
-index 0e7ddb1..2805ed3 100644
---- work/git/barchart-udt/barchart-udt-core/target/udt/udt4/src/epoll.cpp
-+++ work/git/barchart-udt/barchart-udt-core/src/main/c++/udt/src/epoll.cpp
-@@ -99,10 +99,13 @@ int CEPoll::add_usock(const int eid, const UDTSOCKET& u, const int* events)
- if (p == m_mPolls.end())
- throw CUDTException(5, 13);
-
-+ // BARCHART: Manage all event types.
- if (!events || (*events & UDT_EPOLL_IN))
- p->second.m_sUDTSocksIn.insert(u);
- if (!events || (*events & UDT_EPOLL_OUT))
- p->second.m_sUDTSocksOut.insert(u);
-+ if (!events || (*events & UDT_EPOLL_ERR))
-+ p->second.m_sUDTSocksEx.insert(u);
-
- return 0;
- }
-@@ -225,6 +228,11 @@ int CEPoll::wait(const int eid, set* readfds, set* writefd
- total += p->second.m_sUDTWrites.size() + p->second.m_sUDTExcepts.size();
- }
-
-+ // BARCHART: Remove errors when reported.
-+ if(total > 0 && !p->second.m_sUDTExcepts.empty()){
-+ p->second.m_sUDTExcepts.clear();
-+ }
-+
- if (lrfds || lwfds)
- {
- #ifdef LINUX
diff --git a/barchart-udt-core/src/main/patches/udt4/readme.md b/barchart-udt-core/src/main/patches/udt4/readme.md
deleted file mode 100644
index f700303..0000000
--- a/barchart-udt-core/src/main/patches/udt4/readme.md
+++ /dev/null
@@ -1,10 +0,0 @@
-
-patches to udt c++ v 4.11 from git