This is my first time using QuickFIX/n in a .NET application as a FIX initiator. I'm connecting via a local TCP proxy (written in C#) to connect to a counterparty. Here's the relevant setup:
- QuickFIX/n (1.7.0 binaries)
- .NET Core 8 Application
- connecting to 127.0.0.1:15067 (custom proxy) Proxy listening on 127.0.0.1:15068, forwarding to 127.0.0.1:15067
Verified raw TCP messages look valid using a hex logger in the proxy
Issue
QuickFIX/n throws this error shortly after sending the logon:
Session FIX.4.4:my_fix_initiator->broker_fix disconnecting: QuickFix.MessageParseError: Could not parse message: Error at position (3) while parsing msg (8=FIX.4.4...) ---> System.FormatException: The input string 'IX.4.49' was not in a correct format. It appears QuickFIX/n is interpreting the message as starting with 'IX.4.4' instead of '8=FIX.4.4'.
What I’ve verified My proxy logs the exact bytes sent to QuickFIX/n. Here's the relevant hex: HEX: 38 3D 46 49 58 2E 34 2E 34 01 39 3D 31 30 35 01 33 35 3D 41 01 ... ASCII: 8=FIX.4.49=10535=A... The full message is well-formed and includes correct checksum and SOH delimiters (\x01). My client.cfg is:
[DEFAULT]
ConnectionType=initiator
SenderCompID=my_fix_initiator
TargetCompID=broker_fix
SocketConnectHost=127.0.0.1
SocketConnectPort=15068
BeginString=FIX.4.4
UseDataDictionary=Y
DataDictionary=FIX44.xml
ResetOnLogon=Y
ResetSeqNumFlag=Y
HeartBtInt=30
ValidateFields=N
ValidateFieldsOutOfOrder=N
LogHeartbeats=Y
LogIncomingMessages=Y
LogOutgoingMessages=Y
My question Why is QuickFIX/n misreading the message start as 'IX.4.4'? Is there a known bug or edge case in QuickFIX/n's socket handling that might drop or mangle the first byte?