shadow1ng/fscan · error
oracle resend is not supported
Error message
oracle resend is not supported
What it means
When reading n bytes, the session refills its buffer via readPacket(). Oracle servers occasionally respond with a RESEND packet asking the client to retransmit. This library does not implement the resend flow, so it aborts with this error instead of silently mis-handling the exchange.
Source
Thrown at plugins/services/oracle_raw.go:334
_, err := s.conn.Write(buf)
return err
}
func (s *oracleSession) reset() {
s.in = nil
s.out.Reset()
s.index = 0
s.summary = nil
}
func (s *oracleSession) read(n int) ([]byte, error) {
for s.index+n > len(s.in) {
p, err := s.readPacket()
if err != nil {
return nil, err
}
if p.typ == oraclePacketResend {
return nil, errors.New("oracle resend is not supported")
}
if p.typ != oraclePacketData {
return nil, fmt.Errorf("expected oracle data packet, got %d", p.typ)
}
}
ret := s.in[s.index : s.index+n]
s.index += n
return ret, nil
}
func (s *oracleSession) putBytes(data ...byte) {
s.out.Write(data)
}
func (s *oracleSession) putString(v string) {
s.putClr([]byte(v))
}
View on GitHub (pinned to 95cc12e753)
Solutions
- Improve network reliability between client and DB (reduce packet loss, avoid flaky VPN/proxy paths) so the server never requests a resend
- Retry the whole connection on this error, since resend is triggered per-connection state
- Check MTU/fragmentation issues (e.g. VPN tunnels) that commonly trigger Oracle resend requests
- Implement or upstream resend support in the plugin if your environment legitimately requires it
Example fix
// before
if p.typ == oraclePacketResend {
return nil, errors.New("oracle resend is not supported")
}
// after
if p.typ == oraclePacketResend {
// caller-level workaround: retry the entire authentication
return nil, RetryableError(errors.New("oracle resend is not supported"))
} Defensive patterns
Strategy: retry
Try / catch
if err != nil && strings.Contains(err.Error(), "resend is not supported") {
// resend is per-connection state; restart the whole auth
return retryAuth(dsn, 3)
} Prevention
- Improve link reliability to the DB host (avoid lossy VPN/proxy paths)
- Check MTU settings to reduce TCP retransmits that trigger resend requests
- Treat this as retryable at the connection level, not the read level
When it happens
Trigger: s.read(n) requests more data than buffered, the next packet fetched has type oraclePacketResend, and the caller is any of getByte/getBytes/getInt64/getNullTermString or TestSessionRead.
Common situations: Slow or congested links where the server requests retransmission; large auth payloads over lossy networks; packet loss between client and listener that triggers Oracle's resend mechanism.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- short oracle data packet
- oracle advanced negotiation header mismatch
- unsupported oracle server protocol version
- short oracle charset negotiation
- short oracle ncharset negotiation
AI-assisted analysis of shadow1ng/fscan@95cc12e753 (2026-09-06).
Data as JSON: /api/errors/424f4a7e7947d019.
Report an issue: GitHub.