I'm not a big fan of this suggestion, this is typically something you should be scripting yourself, just stored the line read, read the next line and then deal with both lines.
This would not solve the problem of having to store state for when the data is not immediately available (sockreading multiple time in the same event)
It would mean mIRC would have to read the line from winsock and temp store it for you, effectively meaning that /sockread would have to check if there is something to read from a different buffer before processing the rq buffer, it would add extra processing for socket for everyone's code when you should be the one temp storing the data you want, this would just slow down the processing of socket in general, and while it's not so bad of suggestion in itself, I don't think a lot of people would actually use this, sorry I just hate this idea!
And would it fill $sockbr and $sockerr etc? There are more things to figure out than just adding a new command here, I think.
In the meantime I'm sure you know about this but your concrete example is trivial to solve:
on *:sockread:name:{
if (%state == 0) {
sockread -n &header
if (!$sockbr) return
sockread -n &header1
if (!$sockbr) {
hadd -mb table item &header
set %state 1
return
}
;deal with &header and &header1
}
elseif (%state == 1) {
sockread -n &header1
if (!$sockbr) return
noop $hget(table,item,&header)
set %state 0
;deal with &header and &header1
}
}