{
 "number": 36716,
 "input_hash": "a6bdaa566758dd05",
 "model": "ledger",
 "prompt_hash": null,
 "created": "2026-11-02T01:11:53+00:00",
 "result": {
  "summary": "Restricts socket exception monitoring in select() to Windows, and disconnects established peers on Windows if an exception condition occurs. It also adds documentation explaining why Bitcoin Core's P2P layer does not enable SO_OOBINLINE.",
  "problem": "Incoming TCP urgent data sets the socket exception condition in select(). On POSIX systems where urgent data is not read, this can leave the exception pending and cause the network event loop to spin in a busy loop. Bitcoin Core does not use out-of-band data, but Windows still requires monitoring the exception set to detect failed non-blocking connect calls.",
  "card": "Stops monitoring socket exception sets in select() on non-Windows platforms, and disconnects established P2P peers on Windows if an exception triggers. On POSIX systems, TCP urgent data or out-of-band pointers can leave socket exceptions pending without readable data, causing network event loops to busy-spin. This serves as an alternative to PR 36688, avoiding SO_OOBINLINE per RFC 6093 recommendations.",
  "evidence": [
   "Commit 1fde57f1de states: 'Windows needs select's exception set to detect failed non-blocking connects. On other platforms, a TCP urgent pointer can leave the exception set pending even when no data is readable. Only monitor it on Windows, and disconnect established P2P peers if it is set.'"
  ],
  "scope_notes": "",
  "changed_since_previous": "No functional changes to the patch; previous description had no patch diff attached.",
  "thread": {
   "last_event_at": "2026-11-01T07:42:57Z",
   "events": 2,
   "head_sha": "8754e5c1c4746e7f062eb705c07440afb16529dc",
   "schema_floor": 2,
   "schema": 2
  },
  "waiting_on": [
   {
    "at": "2026-11-01",
    "id": "c:6555092908",
    "on": "reviewer",
    "url": "https://github.com/bitcoin/bitcoin/pull/36716#issuecomment-6555092908",
    "what": "pinheadmz to review or respond to author's preference for an HTTP followup"
   }
  ],
  "risk": {
   "level": "medium",
   "touches": [
    "p2p"
   ],
   "why": "Altering select() socket event handling could inadvertently ignore connection failure errors on non-Windows platforms or disconnect valid peers on Windows."
  },
  "discussion": {
   "author_status": "last statement processed 2026-11-01",
   "open_concerns": [],
   "resolved_concerns": [
    "pinheadmz: Apply the same exception-handling logic and urgent-data disconnect test to HTTP in httpserver.cpp (answered by Sjors 2026-11-01)"
   ]
  },
  "reviewability": {
   "state": "Ready",
   "label": "Ready",
   "reason": "Nothing known that would invalidate a review now."
  },
  "agreement": {
   "state": "Crickets",
   "summary": "Crickets: no substantive comment either way",
   "reason": "Sjors replied to pinheadmz's suggestion regarding HTTP server exception handling, preferring a followup.",
   "evidence": [],
   "objections": [
    {
     "reviewer": "pinheadmz",
     "association": "MEMBER",
     "type": "suggestion",
     "kind": "scope",
     "harm": "",
     "request": "Apply the same exception-handling logic and urgent-data disconnect test to HTTP in httpserver.cpp",
     "question": "",
     "text": "Apply the same exception-handling logic and urgent-data disconnect test to HTTP in httpserver.cpp",
     "clears_with": "answer",
     "blocking": false,
     "status": "answered",
     "status_note": "author prefers handling HTTP separately in a followup but is open to doing it here",
     "cleared": true,
     "author_replied": true,
     "others_replied": false,
     "fix_pushed": false,
     "replies": [
      "c:6555092908"
     ],
     "evidence": "2026-10-31: 'Mine as well apply the same logic to HTTP, probably right here'",
     "url": "https://github.com/bitcoin/bitcoin/pull/36716#issuecomment-6542871465",
     "id": "c:6542871465",
     "at": "2026-10-31",
     "status_at": "2026-11-01",
     "status_by": "Sjors",
     "resolution_evidence": "2026-11-01: Sjors: 'My preference is to fix HTTP separately as a followup, but I'm open to doing it here.'",
     "pin": null,
     "from_schema": 2
    }
   ],
   "support": [],
   "participants": [
    {
     "login": "pinheadmz",
     "stance": "neutral",
     "note": "suggested applying the same logic to the HTTP server",
     "association": "MEMBER",
     "comments": 1,
     "first": "2026-10-31",
     "last": "2026-10-31"
    }
   ],
   "derivation": "no substantive comment either way",
   "model_state": null,
   "corrections": [],
   "notes": "Sjors replied to pinheadmz's suggestion regarding HTTP server exception handling, preferring a followup."
  },
  "dependencies": {
   "depends_on": [],
   "enables": []
  },
  "categories": [
   {
    "name": "p2p",
    "member": true,
    "evidence": "Matches the P2P label and modifies connection management and socket polling in src/net.cpp and src/netbase.cpp.",
    "band": "P2",
    "reason_tag": "DoS protection",
    "score": 0.65,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 1,
     "security_stability": 2,
     "user_value": 0
    },
    "rationale": "Prevents a potential busy loop in the P2P network event loop caused by incoming TCP urgent data. As noted in commit 1fde57f1de, on POSIX systems 'a TCP urgent pointer can leave the exception set pending even when no data is readable', which causes select() to spin continuously."
   },
   {
    "name": "utils",
    "member": false,
    "evidence": "Touches src/util/sock.cpp minimally (+3/-0), but the change serves P2P event loop exception handling rather than general utility primitives.",
    "band": "Unranked",
    "reason_tag": "cleanup",
    "score": 0.0,
    "factors": {
     "bug_severity": 2,
     "leverage": 0,
     "performance": 1,
     "security_stability": 2,
     "user_value": 0
    },
    "rationale": "Not a utilities PR; socket polling changes directly target network connection handling."
   }
  ],
  "confidence": "high",
  "uncertainties": [],
  "needs": []
 },
 "cost_usd": 0.0,
 "source": {
  "record": "2026-11-02T01:11:53+00:00",
  "code": "2026-11-02T01:14:55+00:00",
  "judgments": 2
 }
}