aboutsummaryrefslogtreecommitdiff
path: root/src/net.cpp
Commit message (Collapse)AuthorAgeFilesLines
* really s/Doge/Dis/g this timeTomo Ueda2021-09-021-1/+1
|
* rpc: add feefilter to peers from getpeerinfoPatrick Lodder2021-08-141-0/+1
| | | | | | Exposes information about the feefilter the peer sets to us, so that we can make better informed decisions when a transaction does not get relayed.
* Reduce getheaders spam by serializing getheader requests per peerPatrick Lodder2021-07-221-0/+1
| | | | | | | | | | | | Introduces a counter for getheader requests that have been sent to a peer but are pending response, reducing the number of parallel requests a node pushes out to its peers when needing to sync large amounts of headers. All getheader requests are serialized during initial sync, except when a non-connecting header is received, allowing the node to resolve issues with peers sending faulty blocks using the DoS mechanism, and when we get an inv for a block that we do not know, because it's possible we're only connected to legacy nodes that do not implement header announcement properly.
* Introduce basic Dogecoin brandingRoss Nicoll2019-03-251-1/+1
|
* [net] listbanned RPC and QT should show correct banned subnetsJohn Newbery2017-06-051-3/+5
| | | | | Github-Pull: #10234 Rebased-From: 77c54b270dd3b469d662c8f69e06f7b00fc4136d
* net: only enforce the services required to connectCory Fields2017-06-011-1/+20
| | | | | | | | also once half of all outgoing nodes have our preferred flags, require only minimal flags from the rest. Github-Pull: #10441 Rebased-From: b6fbfc228236947eaea5c14dda299f5a01810e92
* Check interruptNet during dnsseed lookupsMatt Corallo2017-05-311-0/+6
|
* Populate services in GetLocalAddressAlex Morcos2017-05-221-1/+1
| | | | | | | | | Previously if we didn't have any local addresses, GetLocalAddress would return 0.0.0.0 and then we'd swap in a peer's notion of our address in AdvertiseLocal, but then nServices would never get set. Github-Pull: #10424 Rebased-From: 307013469f9a3b8f13d3eb9dbeea419a55148493
* Add missing braces in semaphore posts in netMatt Corallo2017-03-171-4/+8
| | | | | Github-Pull: #9953 Rebased-From: 819b513a5415d1669b5440e214862cda6c2261f8
* Fix shutdown hang with >= 8 -addnodes setMatt Corallo2017-03-171-4/+4
| | | | | | | | | | We previously would block waiting for a CSemaphoreGrant in ThreadOpenAddedConnections, when we did not need to. This would block as the posts in CConnman shutdown were both to the wrong semaphore and in the wrong location. Github-Pull: #9953 Rebased-From: e007b243c4840e44857b5ccf686ed35899e44af0
* Merge #9715: Disconnect peers which we do not receive VERACKs from within 60 secWladimir J. van der Laan2017-02-141-0/+5
|\ | | | | | | | | | | | | 66f861a Add a test for P2P inactivity timeouts (Matt Corallo) b436f92 qa: Expose on-connection to mininode listeners (Matt Corallo) 8aaba7a qa: mininode learns when a socket connects, not its first action (Matt Corallo) 2cbd119 Disconnect peers which we do not receive VERACKs from within 60 sec (Matt Corallo)
| * Disconnect peers which we do not receive VERACKs from within 60 secMatt Corallo2017-02-071-0/+5
| |
* | Move CNode::addrLocal access behind locked accessorsMatt Corallo2017-02-101-4/+20
| |
* | Move CNode::addrName accesses behind locked accessorsMatt Corallo2017-02-101-8/+22
| |
* | Move [clean|str]SubVer writes/copyStats into a lockMatt Corallo2017-02-101-1/+4
| |
* | Access fRelayTxes with cs_filter lock in copyStatsMatt Corallo2017-02-101-1/+4
| |
* | Avoid copying CNodeStats to make helgrind OK with buggy std::stringMatt Corallo2017-02-101-3/+2
| |
* | Make nTimeConnected const in CNodeMatt Corallo2017-02-101-1/+1
| |
* | net: fix a few races. Credit @TheBlueMattCory Fields2017-02-101-5/+11
| | | | | | | | | | | | | | | | | | | | | | These are (afaik) all long-standing races or concurrent accesses. Going forward, we can clean these up so that they're not all individual atomic accesses. - Reintroduce cs_vRecv to guard receive-specific vars - Lock vRecv/vSend for CNodeStats - Make some vars atomic. - Only set the connection time in CNode's constructor so that it doesn't change
* | Merge #9698: net: fix socket close raceWladimir J. van der Laan2017-02-101-26/+48
|\ \ | | | | | | | | | | | | 9a0b784 net: add a lock around hSocket (Cory Fields) 45e2e08 net: rearrange so that socket accesses can be grouped together (Cory Fields)
| * | net: add a lock around hSocketCory Fields2017-02-061-15/+28
| | |
| * | net: rearrange so that socket accesses can be grouped togetherCory Fields2017-02-061-14/+23
| |/
* | Merge #9674: Always enforce strict lock ordering (try or not)Wladimir J. van der Laan2017-02-081-10/+8
|\ \ | |/ |/| | | | | | | | | 618ee92 Further-enforce lockordering by enforcing directly after TRY_LOCKs (Matt Corallo) 2a962d4 Fixup style a bit by moving { to the same line as if statements (Matt Corallo) 8465631 Always enforce lock strict lock ordering (try or not) (Matt Corallo) fd13eca Lock cs_vSend and cs_inventory in a consistent order even in TRY (Matt Corallo)
| * Fixup style a bit by moving { to the same line as if statementsMatt Corallo2017-02-041-6/+3
| |
| * Lock cs_vSend and cs_inventory in a consistent order even in TRYMatt Corallo2017-02-021-5/+6
| |
* | Merge #9659: Net: Turn some methods and params/variables constWladimir J. van der Laan2017-02-061-3/+3
|\ \ | | | | | | | | | | | | | | | 0729102 Net: pass interruptMsgProc as const where possible (Jorge Timón) fc7f2ff Net: Make CNetMsgMaker more const (Jorge Timón) d45955f Net: CConnman: Make some methods const (Jorge Timón)
| * | Net: CConnman: Make some methods constJorge Timón2017-01-311-3/+3
| |/
* | Merge #9671: Fix super-unlikely race introduced in 236618061a445d2cb11e72Wladimir J. van der Laan2017-02-041-1/+1
|\ \ | | | | | | | | | 885cfdd Fix super-unlikely race introduced in 236618061a445d2cb11e72 (Matt Corallo)
| * | Fix super-unlikely race introduced in 236618061a445d2cb11e72Matt Corallo2017-02-021-1/+1
| |/ | | | | | | | | | | | | | | | | Once the CNode has been added to vNodes, it is possible that it is disconnected+deleted in the socket handler thread. However, after that we now call InitializeNode, which accesses the pnode. helgrind managed to tickle this case (somehow), but I suspect it requires in immensely braindead scheduler.
* | net: log an error rather than asserting if send version is misusedCory Fields2017-02-021-0/+27
| | | | | | | | | | Also cleaned up the comments and moved from the header to the .cpp so that logging headers aren't needed from net.h
* | net: don't run callbacks on nodes that haven't completed the version handshakeCory Fields2017-02-021-1/+6
|/ | | | | | | | | Since ForEach* are can be used to send messages to all nodes, the caller may end up sending a message before the version handshake is complete. To limit this, filter out these nodes. While we're at it, may as well filter out disconnected nodes as well. Delete unused methods rather than updating them.
* Merge #9626: Clean up a few CConnman cs_vNodes/CNode thingsWladimir J. van der Laan2017-01-301-42/+14
|\ | | | | | | | | | | 2366180 Do not add to vNodes until fOneShot/fFeeler/fAddNode have been set (Matt Corallo) 3c37dc4 Ensure cs_vNodes is held when using the return value from FindNode (Matt Corallo) 5be0190 Delete some unused (and broken) functions in CConnman (Matt Corallo)
| * Do not add to vNodes until fOneShot/fFeeler/fAddNode have been setMatt Corallo2017-01-251-9/+10
| |
| * Ensure cs_vNodes is held when using the return value from FindNodeMatt Corallo2017-01-241-5/+4
| |
| * Delete some unused (and broken) functions in CConnmanMatt Corallo2017-01-241-28/+0
| |
* | Merge #9606: net: Consistently use GetTimeMicros() for inactivity checksWladimir J. van der Laan2017-01-261-4/+4
|\ \ | |/ |/| | | 99464bc net: Consistently use GetTimeMicros() for inactivity checks (Suhas Daftuar)
| * net: Consistently use GetTimeMicros() for inactivity checksSuhas Daftuar2017-01-251-4/+4
| | | | | | | | | | | | | | | | | | | | | | The use of mocktime in test logic means that comparisons between GetTime() and GetTimeMicros()/1000000 are unreliable since the former can use mocktime values while the latter always gets the system clock; this changes the networking code's inactivity checks to consistently use the system clock for inactivity comparisons. Also remove some hacks from setmocktime() that are no longer needed, now that we're using the system clock for nLastSend and nLastRecv.
* | Make the cs_sendProcessing a LOCK instead of a TRY_LOCKMatt Corallo2017-01-131-3/+2
| | | | | | | | | | | | Technically cs_sendProcessing is entirely useless now because it is only ever taken on the one MessageHandler thread, but because there may be multiple of those in the future, it is left in place
* | Split CNode::cs_vSend: message processing and message sendingMatt Corallo2017-01-131-13/+9
|/ | | | | | | | | cs_vSend is used for two purposes - to lock the datastructures used to queue messages to place on the wire and to only call SendMessages once at a time per-node. I believe SendMessages used to access some of the vSendMsg stuff, but it doesn't anymore, so these locks do not need to be on the same mutex, and also make deadlocking much more likely.
* Merge #9441: Net: Massive speedup. Net locks overhaulPieter Wuille2017-01-131-58/+57
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | e60360e net: remove cs_vRecvMsg (Cory Fields) 991955e net: add a flag to indicate when a node's send buffer is full (Cory Fields) c6e8a9b net: add a flag to indicate when a node's process queue is full (Cory Fields) 4d712e3 net: add a new message queue for the message processor (Cory Fields) c5a8b1b net: rework the way that the messagehandler sleeps (Cory Fields) c72cc88 net: remove useless comments (Cory Fields) ef7b5ec net: Add a simple function for waking the message handler (Cory Fields) f5c36d1 net: record bytes written before notifying the message processor (Cory Fields) 60befa3 net: handle message accounting in ReceiveMsgBytes (Cory Fields) 56212e2 net: set message deserialization version when it's actually time to deserialize (Cory Fields) 0e973d9 net: remove redundant max sendbuffer size check (Cory Fields) 6042587 net: wait until the node is destroyed to delete its recv buffer (Cory Fields) f6315e0 net: only disconnect if fDisconnect has been set (Cory Fields) 5b4a8ac net: make GetReceiveFloodSize public (Cory Fields) e5bcd9c net: make vRecvMsg a list so that we can use splice() (Cory Fields) 53ad9a1 net: fix typo causing the wrong receive buffer size (Cory Fields)
| * net: remove cs_vRecvMsgCory Fields2017-01-121-26/+7
| | | | | | | | | | | | | | | | | | | | | | vRecvMsg is now only touched by the socket handler thread. The accounting vars (nRecvBytes/nLastRecv/mapRecvBytesPerMsgCmd) are also only used by the socket handler thread, with the exception of queries from rpc/gui. These accesses are not threadsafe, but they never were. This needs to be addressed separately. Also, update comment describing data flow
| * net: add a flag to indicate when a node's send buffer is fullCory Fields2017-01-121-3/+8
| | | | | | | | | | | | | | | | Similar to the recv flag, but this one indicates whether or not the net's send buffer is full. The socket handler checks the send queue when a new message is added and pauses if necessary, and possibly unpauses after each message is drained from its buffer.
| * net: add a flag to indicate when a node's process queue is fullCory Fields2017-01-121-3/+7
| | | | | | | | | | | | | | | | | | Messages are dumped very quickly from the socket handler to the processor, so it's the depth of the processing queue that's interesting. The socket handler checks the process queue's size during the brief message hand-off and pauses if necessary, and the processor possibly unpauses each time a message is popped off of its queue.
| * net: add a new message queue for the message processorCory Fields2017-01-121-1/+11
| | | | | | | | | | This separates the storage of messages from the net and queued messages for processing, allowing the locks to be split.
| * net: rework the way that the messagehandler sleepsCory Fields2017-01-121-14/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In order to sleep accurately, the message handler needs to know if _any_ node has more processing that it should do before the entire thread sleeps. Rather than returning a value that represents whether ProcessMessages encountered a message that should trigger a disconnnect, interpret the return value as whether or not that node has more work to do. Also, use a global fProcessWake value that can be set by other threads, which takes precedence (for one cycle) over the messagehandler's decision. Note that the previous behavior was to only process one message per loop (except in the case of a bad checksum or invalid header). That was changed in PR #3180. The only change here in that regard is that the current node now falls to the back of the processing queue for the bad checksum/invalid header cases.
| * net: Add a simple function for waking the message handlerCory Fields2017-01-121-4/+6
| | | | | | | | This may be used publicly in the future
| * net: record bytes written before notifying the message processorCory Fields2017-01-121-1/+1
| |
| * net: handle message accounting in ReceiveMsgBytesCory Fields2017-01-121-3/+4
| | | | | | | | | | | | This allows locking to be pushed down to only where it's needed Also reuse the current time rather than checking multiple times.
| * net: set message deserialization version when it's actually time to deserializeCory Fields2017-01-041-1/+1
| | | | | | | | We'll soon no longer have access to vRecvMsg, and this is more intuitive anyway.
| * net: wait until the node is destroyed to delete its recv bufferCory Fields2017-01-041-5/+0
| | | | | | | | | | when vRecvMsg becomes a private buffer, it won't make sense to allow other threads to mess with it anymore.